1

このテキストから名前を正規表現で取得したいだけです。

 Name: 
 Paul Rao  

 Company: 
 Fix UR Gadget      

私はポールラオだけを手に入れるべきです

私は試し(?<=Name:)[\s\S]*\nましたが、うまくいきません、何かアイデアはありますか?

パーツ名:(改行、スペース...)実際の名前(スペース...改行)は同じになりますが、会社は常に下のテキストになるとは限りません。

何か案は ?

4

7 に答える 7

0
(?<=Name:[\s\S\n]*)[a-zA-Z\s\-]*

(?<=Name:[\s\S]*)一致する前に、「名前」という単語、セミコロン、および任意の数の空白文字があることを確認してください。(空白を保証できるので、で切り替えることもできますが、これは機能し*ます)+

[a-zA-Z\s\-]*任意の数の文字、スペース、またはハイフンに一致します(ハイフンは名前の有効な文字であるため)。La-a(Luh-dash-uh)の話を聞いたことがありますか?他の有効な文字もあるかもしれません、私は知りません。

于 2012-09-20T14:59:46.680 に答える
0

何か案は?いいえ、正規表現に関する質問だからです。はい、正規表現である人道に対する罪がなくても、構文解析は実際に楽しいことがあるからです。

たとえば、このWebサイトのチュートリアルを見てください(これが最善のオプションかどうかはわかりません。自分で.NETで解析を行ったことがありますが、表面的には優れているように見えます)

http://www.quanttec.com/fparsec/

あなたが1時間かそこらの少しの時間投資をする気があるならば、私はあなたが振り返らないことを約束します。

于 2012-09-20T15:00:10.370 に答える
0

これはどう:^Name:[^\S\n]$\n(.*)\n

于 2012-09-20T15:03:31.483 に答える
0

後ろを振り返ってみてください。そこに新しい行があることを忘れただけです。

(?<=Name:\n)([^\n]*+)

これで、2番目のグループがそれに一致するはずです。

于 2012-09-20T15:06:38.240 に答える
0
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;
}
于 2012-09-20T15:06:42.240 に答える
0

グループキャプチャを使用する場合は、後読みの使用を回避できます。

var result = Regex.Match(text, @"Name:[\r\n ]+([^\r\n]*)[\r\n ]+")

結果は次のようになりますresult.Groups[1].Value.TrimEnd()

于 2012-09-20T15:12:46.253 に答える
0
        var match = Regex.Match(text, @"Name:[\s]*(.+)(?:$|\r)");
        var name = match.Groups[1].Value;
于 2012-09-21T07:23:36.657 に答える