我一直在嘗試讓特定的正規表示式工作,但我無法讓它執行我需要的操作。
基本上,我希望它尋找火箭。正規表示式應符合 ROCKET 的大寫或小寫,以及帶或不帶標點符號,但不符合另一個單字的一部分。因此,正規表示式將觸發以下任何一個:
rocket
RoCKEt
hi Rocket
This is a rocket.
ROCKET's engine
但當在類似的情況下發現 ROCKET 時,不會觸發 ROCKET
Rocketeer
Sprocket
我一直在嘗試使用在線正則表達式生成器來使其正確,但我無法使其完全匹配。
答案1
我建議加書籤MSDN 正規表示式快速參考
您希望實現由非字母數字字元包圍的單字“rocket”的不區分大小寫的匹配。有效的正規表示式是:
\W*((?i)rocket(?-i))\W*
它將尋找零個或多個 (*) 非字母數字 (\W) 字符,後面跟著不區分大小寫的 Rocket 版本 ( (?i)rocket(?-i) ),再後跟零個或多個 ( * ) 非字母數字字元(\W)。火箭匹配術語周圍的額外括號將匹配分配給一個單獨的群組。因此,「火箭」一詞將出現在第 1 組比賽中。
更新1:
Matt 在評論中說這個正規表示式將在 python 中使用。 Python 的語法略有不同。要在 python 中獲得相同的結果,請使用此正規表示式並將re.IGNORECASE
選項傳遞給compile
ormatch
函數。
\W*(rocket)\W*
在正規表示式101這可以透過在正規表示式輸入旁邊的文字方塊中輸入“i”來模擬。
更新2Ismael 提到,正規表示式不太正確,因為它可能符合「1rocket1」。他發布了一個更好的解決方案,即
(?:^|\W)rocket(?:$|\W)
答案2
我認為在這種情況下,前瞻是矯枉過正的,你最好使用有ignorecase
選項的單字邊界,
\brocket\b
換句話說,在Python中:
>>> x="rocket's"
>>> y="rocket1."
>>> c=re.compile(r"\brocket\b",re.I) # with the ignorecase option
>>> c.findall(y)
[]
>>> c.findall(x)
['rocket']
答案3
與grep
和 一起sed
,您可以使用\<rocket\>
.使用 時grep
,該-i
選項將使其不區分大小寫(我忽略大小寫):
grep -i '\<rocket\>'
我不知道有什麼方法可以讓所有sed
正規表示式不區分大小寫,但總有穴居人的方法:
sed -n '/\<[Rr][Oo][Cc][Kk][Ee][Tt]\>/p'
答案4
我認為你可以用這樣的東西來具體說明你想要的字:
/^(rocket|RoCKEt)$/g