文字列を指定して、引用符で囲まれた完全に大文字の文字列を取得したいと考えています。
たとえば、次の文字列の場合
oqr"awr"q q"ASRQ" asd "qIKQWIR"
が入力されている場合、正規表現は「ASRQ」を一致する文字列としてのみ評価します。
これにアプローチする最良の方法は何ですか?
編集:文字列が数値入力も取ることを言及するのを忘れましたIE:「IO8917AS」は有効な入力です
編集:実際に「1つ以上の文字が必要で、どの文字も小文字ではない」場合は、おそらく次のようにします。
Regex regex = new Regex("\"\\P{Ll}+\"");
これにより、数字も許可されます...そして句読点。数字と大文字だけを許可したい場合は、次を使用できます。
Regex regex = new Regex("\"[\\p{Lu}\\d]+\"");
または、逐語的な文字列リテラル形式で (引用符をより混乱させますが、バックスラッシュはそれほど混乱させません):
Regex regex = new Regex(@"""[\p{Lu}\d]+""");
元の回答(数字が必要になる前)
あなたが望むように聞こえます(パターン内で)
"[A-Z]*"
次のようなものです:
Regex regex = new Regex("\"[A-Z]*\"");
または、Unicode を完全にサポートするには、Lu
Unicode 文字カテゴリを使用します。
Regex regex = new Regex("\"\\p{Lu}*\"");
EDIT:前述のように、引用符で囲まれた空の文字列(これはまだ「すべてが大文字の文字列」です)と一致させたくない場合は、+
代わりに使用します。*
Regex regex = new Regex("\"\\p{Lu}+\");
最初の一致を見つけて表示する短いが完全な例:
using System;
using System.Text.RegularExpressions;
class Program
{
public static void Main()
{
Regex regex = new Regex("\"\\p{Lu}+\"");
string text = "oqr\"awr\"q q\"ASRQ\" asd \"qIKQWIR\"";
Match match = regex.Match(text);
Console.WriteLine(match.Success); // True
Console.WriteLine(match.Value); // "ASRQ"
}
}
このように: "\"[AZ]+\""
最も外側の引用符は正規表現の一部ではなく、C# 文字列を区切ります。
これには、英語の引用符と作品の間に少なくとも 1 つの大文字が必要です。
次のことを試してください。
[\w]*"([A-Z0-9]+)"