我有一个简单的字符串测试,如下所示:
test = 'Liquid marinade for cooking fish liquid vegetables'
我想使用正则表达式在字符串中匹配关键字“ liquid marinade”。 (我匹配其他关键字,并且需要使用单词边界,因此,简单的string.index()
不够用)
我编译以下正则表达式:
regex = re.compile(r'\b(liquid marinade)\b')
然后执行不区分大小写的搜索:
regex.search(test, re.IGNORECASE)
什么也没得到。
与我尝试使用^(liquid marinade)\b
相同。
使用\b(marinade for)\b
匹配第二个和第三个单词,所以我猜问题出在以下事实:字符串以单词Liquid
开头,但是{{1 }}作为单词边界?
答案 0 :(得分:1)
可行
regex = re.compile(r'\b(liquid marinade)\b', re.IGNORECASE)
print(regex.search(test))
您传递给re.IGNORECASE
的{{1}}参数实际上是开始位置。
在search
中也被捕获了很多次(经典问题:Python re.sub with a flag does not replace all occurrences),我建议在添加标志时,您正在使用re.sub
关键字,而不是位置传递,因为flags
方法中可能还有其他选项(起始位置,计数,命名):
re
如果它可以正常工作(例如在flags=re.IGNORECASE
或re.sub
中),那么可以,如果不支持,您会得到(例如此处):
re.compile
至少它没有做其他事情...