C# 匹配随机内容前面的可选模式

C# 匹配随机内容前面的可选模式,c#,.net,regex,C#,.net,Regex,我需要在下面的句子中捕获两组,一组是I,另一组是可选的 I want to match random optional field. 我尝试了以下方法,但没有产生预期的结果: (I).*?(optional)? 删除可选的轮可以正确匹配,但是因为我需要第二个匹配,所以我不能这样做 (I).*?optional? 那么,如何才能正确匹配这两个组?谢谢 您可以尝试以下正则表达式: (I).*(optional) 这对括号将返回捕获组。正则表达式的诀窍是,您需要对导致可选的任何与可选不匹配的内

我需要在下面的句子中捕获两组,一组是I,另一组是可选的

I want to match random optional field.
我尝试了以下方法,但没有产生预期的结果:

(I).*?(optional)?
删除可选的轮可以正确匹配,但是因为我需要第二个匹配,所以我不能这样做

(I).*?optional?

那么,如何才能正确匹配这两个组?谢谢

您可以尝试以下正则表达式:

(I).*(optional)

这对括号将返回捕获组。

正则表达式的诀窍是,您需要对导致
可选
的任何与
可选
不匹配的内容进行分组(并丢弃)

使用负面环视(前面加了一个
?:
,这样组就不会用于捕获):


您提供的正则表达式使
成为可选的
非可选的。
(I)(?:(?!optional).)*(optional)?.*