加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:23:27 所属栏目:百科 来源:网络整理
导读:需要匹配句子的第一部分,直到给定的单词.但是,该单词是可选的,在这种情况下,我想匹配整个句子.例如: I have a sentence with a clause I don’t want. I have a sentence and I like it. 在第一种情况下,我想要“我有一句话”.在第二种情况下,我想“我有一
需要匹配句子的第一部分,直到给定的单词.但是,该单词是可选的,在这种情况下,我想匹配整个句子.例如:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读