模式应该匹配字母和字母。在字符串结尾有不同规则的正则表达式模式?
词seprated与[ ]+
但最后一个字不应该有后[ ]
。
单词数量没有限制。
我已经成功地做到:(http://regexr.com?32s1h)
^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)+$
这是Xav Tvc Dcc_
//工作注意到最后的空间
而不是Xav Tvc Dcc
如何解决我的正则表达式?
模式应该匹配字母和字母。在字符串结尾有不同规则的正则表达式模式?
词seprated与[ ]+
但最后一个字不应该有后[ ]
。
单词数量没有限制。
我已经成功地做到:(http://regexr.com?32s1h)
^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)+$
这是Xav Tvc Dcc_
//工作注意到最后的空间
而不是Xav Tvc Dcc
如何解决我的正则表达式?
如果最后一个字后的空间是可选的,使用正则表达式
^(?:[A-Z][a-z]*(?:[ ]+|$))+$
...如果不应该有最后一个字后面的空间,然后用
^(?:[A-Z][a-z]*(?:[ ]+(?=.)|$))+$
需要一个字末后面没有空间:
^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)*[A-Z]{1}[a-z]+([a-z]+)?$
快速PowerShell的测试:
PS Home:> 'Xav Tvc Dcc ','Xav Tvc Dcc' -match '^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)*[A-Z]{1}[a-z]+([a-z]+)?$'|%{"<$_>"}
<Xav Tvc Dcc>
如果你担心通过改变正则表达式,你可能引入的错误可以随时构建它:
var word = "([A-Z]{1}[a-z]+([a-z]+)";
var regex = string.Format("^({0}?[ ]+){0}$", word);
或任何您使用的语言的类似。
为什么你使用'?:'(未捕捉的组)在这里很重要? –
@RoyiNamir - 优化资源,因为我们不需要系统来记住这样的组 –