このテキストから名前を正規表現で取得したいだけです。
Name:
Paul Rao
Company:
Fix UR Gadget
私はポールラオだけを手に入れるべきです
私は試し(?<=Name:)[\s\S]*\n
ましたが、うまくいきません、何かアイデアはありますか?
パーツ名:(改行、スペース...)実際の名前(スペース...改行)は同じになりますが、会社は常に下のテキストになるとは限りません。
何か案は ?
(?<=Name:[\s\S\n]*)[a-zA-Z\s\-]*
(?<=Name:[\s\S]*)
一致する前に、「名前」という単語、セミコロン、および任意の数の空白文字があることを確認してください。(空白を保証できるので、で切り替えることもできますが、これは機能し*
ます)+
[a-zA-Z\s\-]*
任意の数の文字、スペース、またはハイフンに一致します(ハイフンは名前の有効な文字であるため)。La-a(Luh-dash-uh)の話を聞いたことがありますか?他の有効な文字もあるかもしれません、私は知りません。
何か案は?いいえ、正規表現に関する質問だからです。はい、正規表現である人道に対する罪がなくても、構文解析は実際に楽しいことがあるからです。
たとえば、このWebサイトのチュートリアルを見てください(これが最善のオプションかどうかはわかりません。自分で.NETで解析を行ったことがありますが、表面的には優れているように見えます)
http://www.quanttec.com/fparsec/
あなたが1時間かそこらの少しの時間投資をする気があるならば、私はあなたが振り返らないことを約束します。
これはどう:^Name:[^\S\n]$\n(.*)\n
後ろを振り返ってみてください。そこに新しい行があることを忘れただけです。
(?<=Name:\n)([^\n]*+)
これで、2番目のグループがそれに一致するはずです。
string text = @"
Name:
Paul Rao
Company:
Fix UR Gadget
";
Regex re = new Regex(@"Name:\s*\n(.+?)\s*\n");
Match m = re.Match(text);
if (m.Success)
{
string name = m.Groups[1].Value;
}
グループキャプチャを使用する場合は、後読みの使用を回避できます。
var result = Regex.Match(text, @"Name:[\r\n ]+([^\r\n]*)[\r\n ]+")
結果は次のようになりますresult.Groups[1].Value.TrimEnd()
var match = Regex.Match(text, @"Name:[\s]*(.+)(?:$|\r)");
var name = match.Groups[1].Value;