4

現在、asp.net と C# を使用して Web ページを作成しています。ユーザーが提供した文字列を解析できません。たとえば、ユーザーが次の文字列を提供し、一重引用符または二重引用符の外側にある単語を抽出する必要があります。誰かがこの問題で私を助けることができますか? よろしくお願いいたします。

"we run" live "experiments" inside and outside 'a lab'

正規表現を使用して期待される結果は次のとおりです。

live

inside

and

outside
4

2 に答える 2

1

これでできます。グループ 'unquote' を含むすべての一致は、必要なものと一致します。

(?<unquote>[^"'\s]+)|(?:["][^"]+?["])|(?:['][^']+?['])

C# テスト コード:

 var matches = Regex.Matches( @"""we run"" live ""experiments"" inside and outside 'a lab'", @"(?<unquote>[^""'\s]+)|(?:[""][^""]+?[""])|(?:['][^']+?['])" );
 foreach( Match match in matches )
 {
     if( match.Groups["unquote"].Success )
     {
         Console.WriteLine( match.Groups["unquote"].Value.Trim() );
     }
 }

出力:

住む

中身

外側

どこ:

  • <unquote>unquote というグループに入れることを意味します
  • ^"'\sは、二重引用符またはスペース以外のすべてに一致することを意味します。
  • (?:["][^"]+?["])引用符内のすべてを次の引用符に一致させることを意味します。+? に注意してください。貪欲にならないように、?: グループがキャプチャされないようにします。一重引用符でも同じです。

これは、空の文字列 "" と、単一引用符が二重引用符でネストされている文字列で機能します。アポストロフィを無視しますか? はいの場合は、正規表現を少し拡張して ' の前にスペースがないことを許可する必要があります。

(?<unquote>(?>[^"\s](?<!\s[']))+)|(?:["][^"]+?["])|(?:['][^']+?['])

ライブ実験で頑張ってください。

于 2013-09-22T01:22:57.403 に答える
1
var parts = Regex.Split(input, @"[""'].+?[""']")
            .SelectMany(x => x.Split())
            .Where(s => !String.IsNullOrWhiteSpace(s))
            .ToList();

また

var parts = Regex.Split(input, @"[""'].+?[""']")
            .SelectMany(x => x.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries))
            .ToList();
于 2013-09-21T21:44:54.843 に答える