2 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊
您可能正在尋找
import re
text = "123 Lorem ipsum dolor sit amet, word WORD WoRd consetetur sadipscing elitr, sed diam 123"
pattern = re.compile(r'\bword\b', re.IGNORECASE)
for word in pattern.finditer(text):
print(word.group(0))
這會(huì)產(chǎn)生
word
WORD
WoRd
\b是縮寫(xiě)形式
(?:(?=\w)(?<!\w)|(?<=\w)(?!\w))
其中讀到
(?=\w)(?<!\w) # positive lookahead making sure there's a word character coming
# negative lookbehind making sure theres' n word characte preceding
| # or
(?<=\w)(?!\w) # the other way round
所以,是的
(?:(?=\w)(?<!\w)|(?<=\w)(?!\w))word(?:(?=\w)(?<!\w)|(?<=\w)(?!\w))
會(huì)產(chǎn)生與上面相同的匹配,但似乎有點(diǎn)不可讀。

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
(?<![^a-zA-Z0-9]) 是雙重否定。您是說(shuō),如果主表達(dá)式之前的字符不在 [a-zA-Z0-9] 中,則它不應(yīng)該匹配,也就是說(shuō),只有當(dāng)該字符在 [a-zA-Z0-9] 中時(shí),它才能匹配。只需刪除 ^: (?<![a-ZA-Z0-9])。
您使用的字符串邊界 ^ 和 $ 在這里會(huì)令人困惑,但如果您使用負(fù)向后查找和負(fù)向前查找,則不需要它們。
因此,切換到(?<![a-zA-Z0-9])(word|WORD)(?![a-zA-Z0-9])。
也就是說(shuō),@user3783243 關(guān)于 \b 的評(píng)論是一個(gè)更好的選擇。\b 是一個(gè)“單詞邊界”,它準(zhǔn)確地代表了您要捕獲的內(nèi)容。
添加回答
舉報(bào)