C# 找到几个以最大数量的其他单词开头的单词
下面是我的regexp,用于查找几个单词的开头,由固定数量的其他单词分隔(此处为0或1): 这里是文本,括号中是我想找到的块: 现在,是同一文本中“匹配”操作的结果。我想要的是介于[]之间的,而c#RegExp引擎查找的是介于{}之间的: 通缉和发现:C# 找到几个以最大数量的其他单词开头的单词,c#,regex,C#,Regex,下面是我的regexp,用于查找几个单词的开头,由固定数量的其他单词分隔(此处为0或1): 这里是文本,括号中是我想找到的块: 现在,是同一文本中“匹配”操作的结果。我想要的是介于[]之间的,而c#RegExp引擎查找的是介于{}之间的: 通缉和发现: 1) aaa {[Word1 Word2 Word3] bbb} 2) aaa {[Word1 xxx Word2 xxx Word3] bbb} 3) aaa {[Word1nn xxx Word2nn xxx Word3nn] bbb} 不
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}
因此,我的问题是:
- 在1)到3)中,也找到了句子的结尾,但我不想要它李>
- 在5)到8)中,其中单词由{0,1}个以上的其他单词分隔,但这些单词是由regexp引擎找到的
有什么解决方案吗?您可以使用这样的正则表达式,它适用于大多数语言:
\b(Word1\S* (?:\S+ )?Word2\S* (?:\S+ )?Word3\S*)
注:
\w
匹配(粗略)字符类[a-Za-z0-9]
中的单个(单词)字符,而不是一个单词。使用\S+
表示单词(一系列非空格字符)
使用
\S*
而不是*
,因为
也将匹配空格。您使用的是什么语言?请编辑您的问题并添加相应的语言标签。请澄清您的问题-使用正则表达式问题,一个很好的方法是显示匹配的输入和预期输出-分别显示这行的意思是在[]之间需要,在{}之间找到:
?答案的一部分是可以的。但我无法控制字数之间的距离。怎么做?@francois.p是否更改?
。您可以使用{0,1}
而不是?
,如果这样做,您可以将数字1
更改为另一个数字,该数字将限制中间的字数。例如,(?:\S+){0,2}
将允许所需单词之间最多有2个单词。如果您需要任意数量的单词,请将其转换为*?
:(?:\S+*?
+1以获得良好的修复,看起来Francois可能还可以去掉外圆括号:)@zx81谢谢。我没有在一时冲动中注意到,但是是的,捕获组可以被移除。如果他的匹配.Groups[1].Value
为空,我只希望他不会感到困惑^^
\b(Word1\S* (?:\S+ )?Word2\S* (?:\S+ )?Word3\S*)