2012-11-19 45 views

回答

1

如果最后一个字后的空间是可选的,使用正则表达式

^(?:[A-Z][a-z]*(?:[ ]+|$))+$ 

...如果不应该有最后一个字后面的空间,然后用

^(?:[A-Z][a-z]*(?:[ ]+(?=.)|$))+$ 
+0

为什么你使用'?:'(未捕捉的组)在这里很重要? –

+0

@RoyiNamir - 优化资源,因为我们不需要系统来记住这样的组 –

1

需要一个字末后面没有空间

^([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); 

或任何您使用的语言的类似。

+0

我想过那个解决方案,但我并不想复制这个模式....(谈论第一个答案) –

+0

因为不知道现在的原因,第二个无法正常工作,所以我删除了它。 – Joey

+0

您可以始终使用子模式构造完整模式,以避免更改错误或代码重复。 – Joey

0

为什么去不会做这样的事情:

^([A-Z]{1}[a-z]+\s?)* 

显示Here

然后运行修剪操作来删除尾随空格?

相关问题