需要匹配句子的第一部分,直到给定的单词.但是,该单词是可选的,在这种情况下,我想匹配整个句子.例如:
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 | $)进行分组交替非捕获.
相关问题