阅读Byte Commander的答案后,我想介绍一下可能的改进:
n
只要您n
预先确定,就可以生成一个匹配任何一个单词的正则表达式。例如,如果我想匹配1到3个字,则regexp:
^([A-Z]+)(?:,([A-Z]+))?(?:,([A-Z]+))?$
将匹配下一个句子,并带有一个,两个或三个捕捉组。
HELLO,LITTLE,WORLD
HELLO,WORLD
HELLO
您可以在Regex101上看到有关此正则表达式的完整详细说明。
如我所说,使用您喜欢的语言为您想要的任何组生成此正则表达式都非常容易。由于我不是一个敏捷的人,所以下面是一个红宝石示例:
def make_regexp(group_regexp, count: 3, delimiter: ",")
regexp_str = "^(#{group_regexp})"
(count - 1).times.each do
regexp_str += "(?:#{delimiter}(#{group_regexp}))?"
end
regexp_str += "$"
return regexp_str
end
puts make_regexp("[A-Z]+")
话虽如此,我建议在这种情况下不要使用正则表达式,split
根据您的需要,还有许多其他很棒的工具,从简单到一些标记化模式。恕我直言,正则表达式不是其中之一。例如在红宝石中,我会使用类似str.split(",")
或str.scan(/[A-Z]+/)
,
?