人们!
在这里创建了许多有关正则表达式和unicode的线程,但不幸的是,在我的情况下它不起作用。
我有一个字符串:
STR = "как надоела эта шляпа"
和
query = "шляпа"
我将字符串构建为:
compile = re.compile(u'\\b' + query + u'\\b')
如果我尝试搜索:
search = compile.search(STR, re.U + re.I)
它返回None。 为什么我会得到正则表达式的这种行为?
答案 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
docs,Pattern.search(string[, pos[, endpos]])
的第二个参数是开始搜索的字符串中的位置。
查看您求和的值:
>>> print(re.U)
32
>>> print(re.I)
2
>>> print(re.I + re.U)
34
索引34之后的字符串中没有匹配项。
因此,您可以在对re.I
的调用中传递re.U
和re.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)
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()) # => шляпа