我想要一个正则表达式来匹配一个字符串,只要它包含一个出现预定义次数的字符。匹配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