-1

C# で以下の形式で始まるテキストを読み取るための正規表現パターンを作成するにはどうすればよいですか。

"Sec. 1.01."
"Sec. 1.02."
"Sec. 47.01."
"Sec. 47.06."
"Sec. 71.022."
4

4 に答える 4

3
Sec\.\s\d+\.\d+\.

上記の正規表現が機能する可能性があります。

Sec完全に一致 秒
\.に一致 ドット
\sに一致 スペース
\dに一致 数字 (数字)
\d+に一致 1 つ以上の数字

に一致 引用符も一致させたい場合"は、正規表現の先頭と末尾に追加します。

于 2013-03-06T12:19:24.363 に答える
1

正規表現を作ろう!

最初に、リテラル テキスト (空白を含む) と一致させたいと考えています。ただし、ドットをエスケープする必要があります。

"Sec\. "

次に、1 つ以上の数字を照合します。\d数字に+一致し、上記の 1 つまたは複数に一致します。

"\d+"

次に、別のドットが再びエスケープされました。

"\."

次に、1 つ以上の数字の別のシーケンス:

"\d+"

そして最後に別のドットがエスケープされました:

"\."

このフォームをまとめる:

"Sec\. \d+\.\d+\."

と 数字の間の空白がSec.常に単一のスペースであるとは限らない場合 (たとえば、一連のスペースやタブ)、\s空白クラスとを使用し+て複数回一致させることができます ( "\s+"):

"Sec\.\s+\d+\.\d+\."

正規表現が行の先頭と末尾にも一致する必要がある場合、 は先頭と末尾に^一致$します。

"^Sec\.\s+\d+\.\d+\.$"

最後に、これを C# で使用する場合は、C# が@スラッシュを正しく解釈しないように、文字列の前に を付ける必要があります。

string pattern = @"^Sec\.\s+\d+\.\d+\.$";

式の一部をキャプチャする場合は、キャプチャ グループ( として記述) を使用できます(?<name> regex )。たとえば、数値部分をキャプチャするには、次のようにします。

string pattern = @"^Sec\.\s+(?<num>\d+\.\d+)\.$";

これで、文字列の数値部分を取得できます。

Regex regex = new Regex(pattern);
var match = regex.Match("Sec. 71.022.");
string num = match.Groups["num"].Value;
// num = "71.022"

正規表現リファレンスには、これらすべてとそれ以上のものがあります。

于 2013-03-06T12:20:21.053 に答える
0
MatchCollection mc = Regex.Matches(a, @"^Sec[.]\s(?:\d*[.]){2}$");
foreach (Match item in mc)
{
    Console.WriteLine(item.Value);
}
于 2013-03-06T12:17:01.300 に答える