亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

努力創建正確的正則表達式

努力創建正確的正則表達式

UYOU 2023-09-05 17:20:37
我嘗試為每個“單詞”(小寫或大寫)進行匹配:(單詞|WORD)前后不能有任何字符或數字:(?<![^a-zA-Z0-9]) (word|WORD) (?![^a-zA-Z0-9])如果“word”位于字符串的開頭或結尾:^| (?<![^a-zA-Z0-9])(字|WORD)(?![^a-zA-Z0-9]) |$它根本不起作用,有什么建議嗎?
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

您可能正在尋找


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))

這會產生


word

WORD

WoRd

\b是縮寫形式


(?:(?=\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))

會產生與上面相同的匹配,但似乎有點不可讀。


查看完整回答
反對 回復 2023-09-05
?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

(?<![^a-zA-Z0-9]) 是雙重否定。您是說,如果主表達式之前的字符不在 [a-zA-Z0-9] 中,則它不應該匹配,也就是說,只有當該字符在 [a-zA-Z0-9] 中時,它才能匹配。只需刪除 ^: (?<![a-ZA-Z0-9])。

您使用的字符串邊界 ^ 和 $ 在這里會令人困惑,但如果您使用負向后查找和負向前查找,則不需要它們。

因此,切換到(?<![a-zA-Z0-9])(word|WORD)(?![a-zA-Z0-9])

也就是說,@user3783243 關于 \b 的評論是一個更好的選擇。\b 是一個“單詞邊界”,它準確地代表了您要捕獲的內容。

查看完整回答
反對 回復 2023-09-05
  • 2 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號