1

? で後読み は消費していません:

正規表現:

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

文章:

件名: asdf adsf

マッチ

: asdf 広告

:をマッチに含めたくない

検索すると:
件名 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 に答える