c# – 正则表达式:匹配可选单词

前端之家收集整理的这篇文章主要介绍了c# – 正则表达式:匹配可选单词前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
需要匹配句子的第一部分,直到给定的单词.但是,该单词是可选的,在这种情况下,我想匹配整个句子.例如:

I have a sentence with a clause I don’t want.

I have a sentence and I like it.

在第一种情况下,我想要“我有一句话”.在第二种情况下,我想“我有一句话,我喜欢它.”

Lookarounds将给我第一个案例,但是一旦我尝试使其成为可选项,为了涵盖第二个案例,我得到了整个第一句话.我试过让表达懒惰……没有骰子.

适用于第一种情况的代码

var regEx = new Regex(@".*(?=with)");
string matchstr = @"I have a sentence with a clause I don't want";

if (regEx.IsMatch(matchstr)) {
    Console.WriteLine(regEx.Match(matchstr).Captures[0].Value);
    Console.WriteLine("Matched!");
}
else {
    Console.WriteLine("Not Matched : (");
}

我希望的表达方式:

var regEx = new Regex(@".*(?=with)?");

有什么建议?

提前致谢!
詹姆士

解决方法

有几种方法可以做到这一点.你可以这样做:
^(.*?)(with|$)

第一组不情愿地匹配,即尽可能少的字符.如果该组后面跟着或者结束$anchor,我们总体匹配.

鉴于此输入:

I have a sentence with a clause I don't want.
I have a sentence and I like it.

然后有两场比赛(as seen on rubular.com):

>第1场比赛:

>第1组:“我有一句话”
>第2组:“有”

>第2场比赛:

>第1组:“我有一句话,我喜欢它”.
>第2组:“”(空字符串)

如果您不需要区分这两种情况,可以使用(?:with | $)进行分组交替非捕获.

相关问题

> Difference between .*? and .* for regex

猜你在找的C#相关文章