需要匹配句子的第一部分,最多匹配给定的单词。但是,该词是可选的,在这种情况下,我想匹配整个句子。例如:
在第一种情况下,我想要 "I have a sentence"
。在第二种情况下,我想要 "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|$)
第一组不情愿地匹配,即尽可能少的字符。如果该组后跟
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 ):
"I have a sentence "
"with"
"I have a sentence and I like it"
。 ""
(空字符串)如果您不需要区分这两种情况,您可以使用
(?:with|$)
使分组交替不捕获。相关问题
.*?
and .*
for regex