Python正则表达式查找单词与其他词分开
问题描述:
有没有办法使用re.findall
或另一个正则表达式来计算指定顺序中的单词出现次数,由任意数量的单词分隔?Python正则表达式查找单词与其他词分开
这里是一个“强力”的实施:
def search_query(query, page):
count=i=0
for word in page.split():
if word == query[i]: i+=1
if i==len(query):
count+=1
break
print count
search_query(['hello','kilojoules'],'hello my good friend kilojoules')
1
例如,当查询hello kilojoules
,我想认识hello my good friend kilojoules
为我的查询的实例,但kilojoules is my good friend
不被计算在内。
这是我的一个令人满意的正则表达式:re.findall('hello\s\Skilojoules','hello my friend kilojoules')
。这不起作用。我认为这会起作用,因为我对这个说法的理解是“找到由空格或空格分隔的hello
和kilojoules
的所有实例”。
答
让我澄清一下:
(?s)\bhello\b.*?\bkilojoules\b
此正则表达式意味着*匹配整个单词你好,则任何字符,甚至一个空格和断行,然后整个字千焦耳。
如果你没有换行符,如果你不关心全字匹配,使用
hello.*?kilojoules
注意\s\S
仅仅是一个空白遵循的非空白。因此,hello\s\Skilojoules
可匹配hello bkilojoules
,但不匹配hello kilojoules
。
答
我发现成功re.findall('hello.*?kilojoules','a happy hello my amigo kilojoules now goodbye')
,以下stribizhev的建议
也许'(?s)\ bhello \ b。*?\ bkilojoules \ b'?请注意'\ s \ S'只是一个空格,后面跟着一个非空格。 'hello \ s \ Skilojoules'可以匹配'hello bkilojoules',但不匹配'hello kilojoules'。 –
这里一般嘟about关于使用[原始字符串](https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals),除非你喜欢键入任何原因的反斜杠按钮, – NightShadeQueen
@stribizhev're.findall('(?s)\ bhello \ b。*?\ bkilojoules \ b','hello my amigo kilojoules')'nothing nothing – kilojoules