这是我的正则表达式,用于找到几个单词的开头,用固定数量的其他单词(此处为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}
所以,我的问题是:
任何解决方案?
答案 0 :(得分:2)
您可以使用这样的正则表达式,它应该适用于大多数语言:
\b(Word1\S* (?:\S+ )?Word2\S* (?:\S+ )?Word3\S*)
注意:
\w
匹配(粗略)字符类[A-Za-z0-9]
中的单个(字)字符,而不是单词。使用\S+
表示一个单词(一系列非空格字符)。
使用\S*
代替.*
,因为.
也会匹配空格。