Skip to main content
 首页 » 编程设计

c#之获取正则表达式中第一次出现的匹配项

2024年02月13日29findumars

我有以下文字:

“猫狗鼠狮”

然后我使用正则表达式搜索“dog”或“mouse”:

Regex regex = new Regex(@"dog|mouse"); 

C# 中 Regex 的行为方式是它首先一直搜索单词 dog。如果找到匹配项,它将停止。在正则表达式中找到我的任何单词第一次出现后如何让它停止,意思是在“猫”之后停止,因为这首先发生?

我是否必须进行多次正则表达式搜索并匹配结果的索引?或者是否可以在正则表达式中指定它?

请您参考如下方法:

不,你错了。

Regex regex = new Regex(@"dog|mouse"); 

和

Regex regex = new Regex(@"mouse|dog"); 

两者都会找到“dog”这个词,即使在第二种情况下“mouse”这个词是交替中的第一个。

匹配行为与您描述的不同。正则表达式将检查第一个字符是否可以匹配第一个替代项,如果不匹配,它不会继续到第二个字符,它将尝试第二个替代项。

但是,交替的顺序在另一方面很重要。你会遇到问题,当你有相同开头的替代品并且你将它们从短到长排序时,例如

Regex regex = new Regex(@"Foo|Foobar"); 

这永远不会匹配单词“Foobar”,因为即使文本中有 Foobar,它也会匹配第一个替代项“Foo”。

为了避免这些问题,从长到短排序

Regex regex = new Regex(@"Foobar|Foo"); 

这将尝试在“Foo”上匹配“Foobar”,当它识别出后面没有“b”时,它会尝试第二种选择并成功匹配“Foo”。