2012-11-14 208 views
1

鉴于以下正则表达式:正则表达式匹配的双连字符的字符串

^((?:\d+\s)?\w+(?:\s\w+)?) 

其工作良好,以提取所述第一(最多)2个字(带有数字前缀,如果存在的话),我怎样才能适应它包括连字符的单词?

我试着在第一个w+之后加入\-,但是只找到了连字符的前半部分并且破坏了原始功能。

有效匹配的一些例子:

  • 1两
  • 3四五
  • 六七八
  • 九岁十

他们是一个地址的组成部分因此,我想,也可能在某个地方有一个撇号,我怎么也检查这个?

+0

多的话,我不认为你需要逃脱'-'的'[]'之外。 – 2012-11-14 14:38:58

+0

Try \ - *因为如果你忽略了这个量词,你只能匹配带连字符的单词 –

回答

2

使用[\s\-],而不是\s

[\s\-]要么匹配space- ..

所以应该

^((?:\d+[\s\-])?\w+(?:[\s\-]\w+)?) 

上述正则表达式不会为您的有效matches..you工作应该使用下面给出的正则表达式


一种更好的方式,以匹配-或空间分隔的将是

^\w+([\s\-]\w+){0,2}$ 
+0

感谢您对使用方括号的解释和澄清。第一个例子几乎是我在寻找的东西,除了它使用我的示例匹配时,它只能达到Six-Seven。你最后一个例子的问题是,它会匹配超过3个单词。我需要将比赛压缩到所提供的例子。请原谅我缺乏正则表达式的理解,但是您能否详细说明如何匹配我提供的示例,而不是更多? – MrG

+0

@MrG你可以使用'{0,2}'检查最后一个正则表达式中的编辑 – Anirudha