6

正規表現を使用して、二重引用符で囲まれたすべてのテキストと、そのような文字列の引用符からすべての単語を抽出するにはどうすればよいですか。

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

最初の正規表現は、次のように二重引用符で囲まれたすべてのテキストを抽出する必要があります

SET 001
BACK
01 IN

2番目の式は、文字列内の他のすべての単語を抽出する必要があります

01AB
IN
SET
09SS
76
SET

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

4

5 に答える 5

5

この式を試してください:

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

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

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

于 2012-09-22T10:59:29.257 に答える
4

この正規表現を試してください:

\"[^\"]*\"

Regex.Matches二重引用符で囲まれたテキストに使用しRegex.Split、他のすべての単語に使用します。

var strInput = "01AB \"SET 001\" IN SET \"BACK\" 09SS 76 \"01 IN\" SET";
var otherWords = Regex.Split(strInput, "\"[^\"]*\"");
于 2012-09-22T11:23:07.437 に答える
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("  "," "));
于 2012-09-22T11:04:02.850 に答える
1

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

(?!パターン)

このリンクをチェックしてください。

于 2012-09-22T11:02:46.983 に答える
1

文のす​​べてのブロック(引用されたものではなく引用されたもの)が必要であることが示唆された場合は、正規表現を使用してソース文字列を分離するより簡単な方法があります。分割

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] == '\"'
                    });
于 2014-10-30T11:58:19.693 に答える