我想寫一個正則表達式匹配的值,如U.S.
,D.C.
,U.S.A.
等正則表達式匹配的縮寫
這裏是我迄今爲止 -
\b([a-zA-Z]\.){2,}+
注意如何此表達式匹配但不包括首字母縮寫詞中的最後一個字母。
任何人都可以幫助解釋我在這裏失蹤?
SOLUTION
我在這裏張貼的情況下解決這一幫助的人。
\b(?:[a-zA-Z]\.){2,}
看起來好像在這裏需要一個非捕獲組。
我想寫一個正則表達式匹配的值,如U.S.
,D.C.
,U.S.A.
等正則表達式匹配的縮寫
這裏是我迄今爲止 -
\b([a-zA-Z]\.){2,}+
注意如何此表達式匹配但不包括首字母縮寫詞中的最後一個字母。
任何人都可以幫助解釋我在這裏失蹤?
SOLUTION
我在這裏張貼的情況下解決這一幫助的人。
\b(?:[a-zA-Z]\.){2,}
看起來好像在這裏需要一個非捕獲組。
嘗試(?:[a-zA-Z]\.){2,}
?:
(非捕獲組)有沒有因爲你要忽略捕捉重複組的最後一個迭代。
例如,沒有?:
,'U.S.A'。會產生一個你不感興趣的小組賽A.'。
Leromul,您的答案是正確的,但爲了完整性,我認爲這對我自己和其他人提供解釋會有所幫助爲什麼這個工程與我的解決方案沒有關係。謝謝! – Randy
這些提出的解決方案中沒有做什麼你不 - 確保有在縮寫至少2個字母。此外,你的作品在http://rubular.com/。這可能是正則表達式實現的一些問題 - 公平地說,你得到的所有匹配都是有效的首字母縮略詞。爲了解決這個問題,你既可以:
(?=\s|$)
至少)^
和$
以確保它捕獲整個字符串。你必須將空格上的整個字符串拆分,才能與此匹配。我更喜歡前者的解決方案 - 要做到這一點你必須:
\b([a-zA-Z]\.){2,}(?=\s|$)
編輯:我意識到,這實際上並不與字符串中其他標點符號工作,和其他邊緣情況。這是超級難看,但我認爲它應該是足夠好:
(?<=\s|^)((?:[a-zA-Z]\.){2,})(?=[[:punct:]]?(?:\s|$))
這是假設你已經有了這個[[:PUNCT:]字符類,並允許0-1標點符號後一個不會被捕獲的首字母縮略詞。我也修正了它,以便有一個捕獲組獲取整個首字母縮寫詞。檢查驗證http://rubular.com/r/lmr0qERLDh
獎勵:你現在得讓這個超級混淆給任何讀它的人。
類似'/([A-Za-z] \。)+ /' –
這與我已有的有何不同?我已經添加了字邊界限制以及限制,即首字母縮略詞必須至少包含兩個字母。 – Randy
@ nu11p01n73r,看看我上面的截圖。我認爲這是很好的說明。 – Randy