Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 找到几个以最大数量的其他单词开头的单词_C#_Regex - Fatal编程技术网

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

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} 不

下面是我的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}
不需要也找不到:

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*)