0

模式应该匹配带有大写字母的单词。

单词是分开的[ ]+

但最后一个词不应该[ ]在它之后。

字数没有限制。

我设法做到了:(http://regexr.com?32s1h

^([A-Z]{1}[a-z]+([a-z]+)?[ ]+)+$

这是为Xav Tvc Dcc_//注意最后一个空格工作

但不是为了Xav Tvc Dcc

我怎样才能修复我的正则表达式?

4

3 回答 3

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);

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

于 2012-11-19T19:54:01.253 回答
1

如果最后一个单词后面的空格是可选的,请使用正则表达式模式

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

...如果最后一个单词后面不应该有空格,那么请使用

^(?:[A-Z][a-z]*(?:[ ]+(?=.)|$))+$
于 2012-11-19T20:11:27.160 回答
0

为什么不做这样的事情:

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

在这里显示

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

于 2012-11-19T21:13:58.907 回答