2012-09-22 12 views
6

のうち、すべての単語を抽出し、私は二重引用符内のすべてのテキストを抽出することができ、そして、そのような文字列の引用符のうち、すべての単語:正規表現:どのように正規表現を使用することにより、引用符

01AB "SET 001" IN SET "BACK" 09SS 76 "01 IN" SET 

まず正規表現は、すべてのテキストを抽出する必要があります

SET 001 
BACK 
01 IN 

第二の表現のような内部の二重引用符は、文字列内の他のすべての単語を抽出shoud

01AB 
IN 
SET 
09SS 
76 
SET 

最初のケースではうまく動作します("(.*?)")。引用符からすべての単語を抽出するにはどうすればよいですか?

+0

あなたとそのほぼ同じこの[リンク](http://stackoverflow.com/questions/9133220/regex-matches-c-sharp-double-quotes)をチェック – andy

答えて

5

はこの表現を試してみてください:

(?:^|")([^"]*)(?:$|") 

それらは非キャプチャー括弧(?:)に囲まれているので、それにマッチしたグループは、引用符を除外します。もちろん、C#コードで使用するために二重引用符をエスケープする必要があります。

ターゲット文字列が引用符で囲まれた値で開始または終了する場合は、この式も空のグループと一致します(最初と後ろの引用符では)。

1

最初の式のパターンを否定する必要があります。

(?!パターン)

this linkをチェックしてください。

2

たぶん、あなたは次のように空の文字列での引用符の内側の単語を交換してくださいすることができます

Regex r = new Regex("\".*?\"", RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.Singleline); 
     string p = "01AB \"SET 001\" IN SET \"BACK\" 09SS 76 \"01 IN\" SET"; 

     Console.Write(r.Replace(p, "").Replace(" "," ")); 
4

この正規表現を試してみてください:二重引用符でテキストの

\"[^\"]*\" 

使用Regex.Matchesを、他のすべてのためにRegex.Splitを使用単語:

var strInput = "01AB \"SET 001\" IN SET \"BACK\" 09SS 76 \"01 IN\" SET"; 
var otherWords = Regex.Split(strInput, "\"[^\"]*\""); 
1

文ではなく、引用符で囲んだものであれば、Regexを使ってソース文字列を分離するもっと簡単な方法があります。 スプリット

static Regex QuotedTextRegex = new Regex(@"("".*?"")", RegexOptions.IgnoreCase | RegexOptions.Compiled); 

var result = QuotedTextRegex 
       .Split(sourceString) 
       .Select(v => new 
        { 
         value = v, 
         isQuoted = v.Length > 0 && v[0] == '\"' 
        });