1

向后看?不消耗

正则表达式:

(?i)(?<=\bsubject:?).+$

文本:

主题: asdf adsf

匹配

: asdf adf

我不希望:包含在比赛中

如果我搜索:
主题 asdf adsf
它匹配:
asdf adsf
这就是我想要的行为
它似乎将 : 视为可选但不消耗

如果我只匹配主题:?它是贪婪的,包括

4

4 回答 4

1

使用这个正则表达式(?i)(?<=\bsubject:?)[^:].*$

于 2013-04-01T13:08:35.550 回答
0

: 后面有一个问号,这将使冒号成为可选的。

(?i)(?<=\bsubject:).+$
于 2013-04-01T13:06:24.680 回答
0

这对我来说没问题:

(?i)(?<=subject:).+$

去掉多余的问号。

于 2013-04-01T13:07:08.750 回答
0

除非我误解了,否则我认为您不需要对此进行展望?

如果您只是在遵循以下内容Subject,那么这就是您的正则表达式:

Subject\:?(.+)$

如果您追求以下内容Subjectsubject或者例如suBject,这就是您的正则表达式:

(?i)Subject\:?(.+)$

\b如果仍然有必要,请再次包含您的单词边界:

\bSubject\:?(.+)$或者(?i)\bSubject\:?(.+)$

因此,在 C#.NET 中:

Regex r = new Regex(@"(?i)Subject\:?(.+)$");

Match m = r.Match("Subject asdf asdf");
Console.WriteLine(m.Groups[1]);

m = r.Match("Subject: asdf asdf");
Console.WriteLine(m.Groups[1]); 

//Both output ' asdf asdf' - you might want to trim this.  
//Or add optional space \s? after the optional colon \:? in your regex.

或者,与其依靠魔术常量与隐式编号的捕获组对齐,不如显式命名(和引用)该组:

string captureName = "yourcap";

Regex r = new Regex(@"(?i)Subject\:?(?<"+captureName+">.+)$");
Match m = r.Match("Subject asdf asdf");
Console.WriteLine(m.Groups[captureName]);
于 2013-04-01T13:10:40.007 回答