我應該如何編寫正規表示式來匹配特定單字?

我應該如何編寫正規表示式來匹配特定單字?

我一直在嘗試讓特定的正規表示式工作,但我無法讓它執行我需要的操作。

基本上,我希望它尋找火箭。正規表示式應符合 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選項傳遞給compileormatch函數。

\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

相關內容