0

私は文字列を持っています -

xyz":abc,"lmn

abcを抽出したい。これの正規表現は何になりますか?

私はこれを試しています -

/xyz\":(.*?),\"lmn/

しかし、結果を取得していません。

4

1 に答える 1

1

C#では、使用できます

var regex = new Regex(@"(?<=xyz\"":).*?(?=,\""lmn)");
var value = regex.Match(@"xyz"":abc,""lmn").Value;

これは、エスケープ文字として扱われない@ことを意味する c# verbatim 文字列プレフィックスを使用することに注意してください。シングルが文字列に含まれるように\、ダブルを使用する必要があります。""

この正規表現は、結果から特定のグループを選択しなくても一致を取得できるように、プレフィックスとサフィックスの一致ルールを利用します。

または、グループマッチングを使用できます

var regex=new Regex(@"xyz\"":(.*?),\""lmn");
var value = regex.Match(@"xyz"":abc,""lmn").Groups[1].Value;

次のようにして、一致の存在を確認できます。

var match = regex.Match(@"xyz"":abc,""lmn");
var isMatch = match.Success;

次に、使用した正規表現に応じて、match.Valueまたはのいずれかでフォローアップします。match.Groups[1].Value

編集 実際には"、ac# 正規表現ではエスケープは必要ないため、代わりに次のいずれかを使用できます。

var regex = new Regex("(?<=xyz\":).*?(?=,\"lmn)");
var regex = new Regex("xyz\":(.*?),\"lmn");

これら 2 つは逐語的な文字列接頭辞を使用しないため、\"は正規表現に変換され、または"の正規表現を与えます。(?<=xyz":).*?(?=,"lmn)xyz":(.*?),"lmn

さらに、部分文字列ではなく文字列全体の一致である場合は、次のいずれかが必要です。

var regex = new Regex("(?<=^xyz\":).*?(?=,\"lmn$)");
var regex = new Regex("^xyz\":(.*?),\"lmn$");
于 2013-07-11T08:36:15.840 に答える