2014-02-18 70 views
0

我在Java中编写了一个正则表达式,用于捕获某些没有空格的单词。 单词只能包含字母,数字,连字符和圆点。 字符集[\w+\-\\.]工作正常。 现在我想编辑设置以允许点之后的单个空间。 如何编辑我的正则表达式?正则表达式,其中包含一个字符后跟一个字符

+1

是否允许多个点?你能告诉我们一些输入/输出吗? – Toto

+0

我想捕获像“史密斯”和更复杂的名字,如“史密斯夫人”的简单名称 – Andrea

回答

0

您可以添加匹配该额外要求的alternation

([\w\-.]|(?<=\.))+ 

看到它here on Regexr

(?<=\.)lookbehind assertion。它确保只有空格匹配,如果它前面有一个点。

其他提示:

  • \w包含下划线和每默认情况下只ASCII字母/数字匹配。如果您关心的是Unicode,请使用修饰符UNICODE_CHARACTER_CLASS以启用对于\w的Unicode或使用Unicode properties\p{L}\p{Nd}来匹配Unicode字母和数字。

  • 你不需要逃避角色类中的点。

  • 您的字符类中有\w+,您是否知道,您只是将“+”字符添加到接受的字符?

+0

你忘了提及字符类中的'+'。我很确定这是一个错误。 –

+0

不,我的意思是*里面的字符类是'[\ w + \ - 。]'。 OP没有列出“+”作为允许的字符之一,所以这可能不是他的意思。我们发现那些仍然模糊了正方括号和正则表达式括号之间差异的人会遇到这样的错误。 –

+0

@AlanMoore,对不起,完全忽略了这个区别,在char类和允许的字符之间。为此添加了一点。 – stema

0

如果一个点后跟一个空格,我想这个模式应该既不是匹配字符串中的第一个也不是最后一个?您可能需要把它们放在字边界\b

([0-9A-Za-z-]|\b\.(\b)?)+ 

我故意没有使用\w,排除下划线。

+0

所有提出的解决方案的作品,谢谢大家,我今天学到了很多关于正则表达式的东西:) – Andrea

0

只允许后点空单,你可以使用这个表达式:

^(?!.*?\. {2})[\w.-]+$ 
  • 你不需要逃避字符类中圆点或连字符
  • (?!.*?\. {2})是否定性预测,在点后不允许有2个或更多空格
+0

所有提出的解决方案的作品,谢谢大家,我今天学到了很多关于正则表达式的东西:) – Andrea

相关问题