[英]Python regex doesn't match words
鄉親們!
這里創建了許多關於正則表達式和unicode的線程,但不幸的是,在我的情況下它不起作用。
我有字符串:
STR = "как надоела эта шляпа"
和
query = "шляпа"
我將字符串構建為:
compile = re.compile(u'\\b' + query + u'\\b')
如果我嘗試搜索:
search = compile.search(STR, re.U + re.I)
它返回None。 為什么我有這種正則表達式的行為?
您需要將標志傳遞到編譯階段。
STR = u"как надоела эта шляпа"
query = u"шляпа"
compile = re.compile(u'\\b' + query + u'\\b', re.U | re.I)
search = compile.search(STR)
根據Python的re
文檔 , Pattern.search(string[, pos[, endpos]])
二個參數是,其中搜索是開始字符串中的位置 。
查看您求和的值:
>>> print(re.U)
32
>>> print(re.I)
2
>>> print(re.I + re.U)
34
索引34之后的字符串中沒有匹配項。
因此,您可以在re.compile
調用中傳遞re.I
和re.U
標志:
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()) # => шляпа
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.