找到几个以最大数量的其他单词开头的单词

时间:2014-07-17 09:52:49

标签: c# regex

这是我的正则表达式,用于找到几个单词的开头,用固定数量的其他单词(此处为0或1)分隔:

\b(Word1.*\b(?:\w{0,1})\bWord2.*\b(?:\w{0,1})\bWord3.*)\b

这里是文本,括号之间是我想要找到的块:

现在,是同一文本中“匹配”操作的结果。我想要的是[]之间,以及c#RegExp引擎在{}之间找到的内容:

通缉和发现:

1) aaa {[Word1 Word2 Word3] bbb}
2) aaa {[Word1 xxx Word2 xxx Word3] bbb}
3) aaa {[Word1nn xxx Word2nn xxx Word3nn] bbb}

不想要而且找不到:

4) aaa mmWord1nn xxx mmWord2nn xxx mmWord3nn bbb

不想要并找到:

5) aaa {Word1nn xxx xxx Word2nn xxx Word3nn bbb}
6) aaa {Word1nn xxx xx Word2nn xxx xxx Word3nn bbb}
7) aaa {Word1 xxx Word2 xxx xxx Word3 bbb}
8) aaa {Word1 xxx xx Word2 xxx xxx Word3 bbb}

所以,我的问题是:

  • on 1)to 3),也找到了句末,但我不想要它;
  • on 5)to 8),其中单词由{0,1}个其他单词分隔,但由regexp引擎找到。

任何解决方案?

1 个答案:

答案 0 :(得分:2)

您可以使用这样的正则表达式,它应该适用于大多数语言:

\b(Word1\S* (?:\S+ )?Word2\S* (?:\S+ )?Word3\S*)

regex101 demo

注意:

\w匹配(粗略)字符类[A-Za-z0-9]中的单个(字)字符,而不是单词。使用\S+表示一个单词(一系列非空格字符)。

使用\S*代替.*,因为.也会匹配空格。