我想要一個正則表達式來匹配一個字符串,只要它包含一個出現預定義次數的字符。匹配Regular Expressoin如果字符串恰好包含一個字符的N個字符
例如: 我想匹配所有包含字符「_」的字符串3次;
所以 「爲a_b_c_d」將通過
「A_B」會失敗
「a_b_c_d_e」會失敗
是否有人知道一個簡單的正則表達式,將滿足呢?
謝謝
我想要一個正則表達式來匹配一個字符串,只要它包含一個出現預定義次數的字符。匹配Regular Expressoin如果字符串恰好包含一個字符的N個字符
例如: 我想匹配所有包含字符「_」的字符串3次;
所以 「爲a_b_c_d」將通過
「A_B」會失敗
「a_b_c_d_e」會失敗
是否有人知道一個簡單的正則表達式,將滿足呢?
謝謝
對於你的榜樣,你可以這樣做:
\b[a-z]*(_[a-z]*){3}[a-z]*\b
(與忽略大小寫標誌)。
你可以用它玩here
它說:「匹配0或多個字母,其次是‘_ [A-Z] *’正好三次,其次是0個或多個字母」。 \b
的意思是「單詞邊界」,即「匹配整個單詞」。
因爲我已經使用'*',所以如果單詞中有三個「_」,無論它出現在單詞的開始還是結尾,都會匹配 - 否則可以修改它。
此外,我假設你想要匹配一個字符串中的所有單詞,其中只有三個「_」。
這意味着字符串「a_b a_b_c_d」會說「a_b_c_d」通過(但「a_b」失敗)。
如果你的意思是全球跨越整個字符串你只需要三「_」出現,然後使用:
^[^_]*(_[^_]*){3}[^_]*$
此錨定的正則表達式在字符串的開始和去最後,確保其中只有三次出現「_」。
這應做到:
^[^_]*_[^_]*_[^_]*_[^_]*$
如果你的例子是唯一的可能性(如a_b_c _...),那麼其他人都很好,但我寫了一個可以處理其他可能性的例子。如:
a__b_adf
a_b_asfdasdfasfdasdfasf_asdfasfd
___
_a_b_b
等等
這裏是我的正則表達式。
\b(_[^_]*|[^_]*_|_){3}\b
該解決方案似乎不起作用。 – 2014-09-23 18:35:44
在闡述雷達的答案,這是迄今爲止最多元,但可能是一個痛苦的,如果有更多的事件來匹配寫:
^([^_]*_){3}[^_]*$
它將匹配整個字符串(從開始^
到端$
),其中恰好有3({3}
)倍包括0個或多個(*
)倍的任何字符不被下劃線([^_]
)和一個下劃線(_
)的圖案,整個被後跟0或多個時代的任何特徵除了下劃線之外([^_]*
,再次)。
當然一個可替代基團的其他方式圓形,如在我們的情況下,圖案是對稱的:
^[^_]*(_[^_]*){3}$
\ B [AZ] *(_ [AZ] *){3} [AZ] * \ b正是我所需要的。大! – Tucker 2012-02-16 02:44:36
請注意,只有當下劃線用小寫字母字符(即字母)分隔時,這纔會起作用。 – 2014-09-23 18:44:10