Python re.search行为以行开头

时间:2018-07-03 12:45:45

标签: python regex

我有一个简单的字符串测试,如下所示:

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 }}作为单词边界?

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

至少它没有做其他事情...