Python正则表达式与单词不匹配

时间:2018-06-28 20:02:32

标签: python regex

人们!

在这里创建了许多有关正则表达式和unicode的线程,但不幸的是,在我的情况下它不起作用。

我有一个字符串:

 STR = "как надоела эта шляпа"

query = "шляпа"

我将字符串构建为:

compile = re.compile(u'\\b' + query + u'\\b')

如果我尝试搜索:

search = compile.search(STR, re.U + re.I)

它返回None。 为什么我会得到正则表达式的这种行为?

2 个答案:

答案 0 :(得分:0)

您需要将标志传递到编译阶段。

STR = u"как надоела эта шляпа"
query = u"шляпа"
compile = re.compile(u'\\b' + query + u'\\b', re.U | re.I)
search = compile.search(STR)

答案 1 :(得分:0)

根据Python re docsPattern.search(string[, pos[, endpos]])的第二个参数是开始搜索的字符串中的位置

查看您求和的值:

>>> print(re.U)
32
>>> print(re.I)
2
>>> print(re.I + re.U)
34

索引34之后的字符串中没有匹配项。

因此,您可以在对re.I的调用中传递re.Ure.compile标志:

re.compile(ur'\b{}\b'.format(query), re.U | re.I)

或将它们用作模式中的内联修饰符

re.compile(ur'(?ui)\b{}\b'.format(query))

或在第三个参数为 flags 的地方使用普通的re.search

re.search(ur'\b{}\b'.format(query), STR, re.I | re.U)

Python code demo

import re
STR = u"как надоела эта шляпа"
query = u"шляпа"
compile = re.compile(ur'\b{}\b'.format(query), re.U | re.I)
search = compile.search(STR)
print(search.group()) # => шляпа