次の文字列を照合して数字を抽出しようとしています:
"Control 1"
"Control 2"
次のような同様の文字列を避けたいと思います。
"Indication 1"
"Local Control Input 2"
これは私が使用しているパターンです:
@"^Control (?<slot>\d+)$"
それは完全に機能しmatch.Groups["slot"].Value
、数値を返します。ただし、次のものも一致させる必要があることがわかりました。
"Office In 1"
"Office In 2"
正規表現を次のように変更しました。
@"^(?:Control)|(?:Office In) (?<slot>\d+)$"
問題はmatch.Groups["slot"].Value
、空の文字列を返すことです! 少なくとも1桁ある必要はありませんか? +
2 つの既存のグループの周りに追加の非キャプチャ グループをランダムに追加してみました。
@"^(?:(?:Control)|(?:Office In)) (?<slot>\d+)$"
これで問題は解決しましたが、その理由はわかりません。