正则表达式,用于计算字符串中逗号的数量

时间:2009-05-14 12:45:02

标签: regex

如何构建一个正则表达式,该表达式将匹配包含任何字符但必须包含21个逗号的任何长度的字符串?

9 个答案:

答案 0 :(得分:88)

/^([^,]*,){21}[^,]*$/

那是:

^     Start of string
(     Start of group
[^,]* Any character except comma, zero or more times
,     A comma
){21} End and repeat the group 21 times
[^,]* Any character except comma, zero or more times again
$     End of string

答案 1 :(得分:11)

如果你正在使用支持占有量词的正则表达式(例如Java),你可以这样做:

^(?:[^,]*+,){21}[^,]*+$

占有量词可以比贪心量词更好。


说明:

(?x)    # enables comments, so this whole block can be used in a regex.
^       # start of string
(?:     # start non-capturing group
[^,]*+  # as many non-commas as possible, but none required
,       # a comma
)       # end non-capturing group
{21}    # 21 of previous entity (i.e. the group)
[^,]*+  # as many non-commas as possible, but none required
$       # end of string

答案 2 :(得分:7)

迭代字符串可能更快,更容易理解,计算找到的逗号数量,然后将其与21进行比较。

答案 3 :(得分:6)

正好是21个逗号:

^([^,]*,){21}[^,]$

至少21个逗号:

^([^,]?,){21}.*$

答案 4 :(得分:1)

^(?:[^,]*)(?:,[^,]*){21}$

答案 5 :(得分:1)

如果完全是21:

/^[^,]*(,[^,]*){21}$/

如果至少21:

/(,[^,]*){21}/

但是,我建议不要使用正则表达式来完成这么简单的任务。因为它很慢。

答案 6 :(得分:0)

用什么语言?可能有一种更简单的方法。

例如......

在CFML中,您可以看到ListLen(MyString)是否为22

在Java中,您可以将MyString.split(',')与22

进行比较

等...

答案 7 :(得分:0)

var valid = ((" " + input + " ").split(",").length == 22);

...或

var valid = 21 == (function(input){
    var ret = 0;
    for (var i=0; i<input.length; i++)
        if (input.substr(i,1) == ",")
            ret++;
    return ret
})();

表现优于......

var valid = (/^([^,]*,){21}[^,]*$/).test(input);

答案 8 :(得分:-9)

.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,