我需要在字符串中搜索多个单词.
import re
words = [{'word':'test1', 'case':False}, {'word':'test2', 'case':False}]
status = "test1 test2"
for w in words:
if w['case']:
r = re.compile("\s#?%s" % w['word'], re.IGNORECASE|re.MULTILINE)
else:
r = re.compile("\s#?%s" % w['word'], re.MULTILINE)
if r.search(status):
print "Found word %s" % w['word']
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这只会找到"test2"而从不"test1".为什么是这样?
我知道我可以使用| 划分搜索,但可能有数百个单词,这就是我使用for循环的原因.
没有空间之前test1的status,而你生成的正则表达式需要那里是一个空间.
您可以修改测试以匹配空格后或行的开头:
for w in words:
if w['case']:
r = re.compile("(^|\s)#?%s" % w['word'], re.IGNORECASE|re.MULTILINE)
else:
r = re.compile("(^|\s)#?%s" % w['word'], re.MULTILINE)
if r.search(status):
print "Found word %s" % w['word']
Run Code Online (Sandbox Code Playgroud)