文字列のリストに正規表現パターンを実装しています。このような文字列の例は次のとおり"MNT-PUT-Y0-HAS90"
です。次のような他の不要な文字列もあります"MNT-PUT-HAS90"
。
以下のコードを実行すると、不要なコードに対して「」が表示されます。これは、正規表現がどのように機能するかを推測します。そして、私"MNT-PUT-Y0-HAS90"
は欲しいものを手に入れます。
問題は、MNT-PUT-HAS90の発生を完全に無視するにはどうすればよいかということです。文字列の結果"MNT-PUT-Y0-HAS90"
のみを取得したい。
私はこれのために以下のコードを実装しました:
Store = a.Type == "Machines" ?
string.Join(",", a.Info.Disk.Select(b => b.Store).
Select(x => Regex.Match(x, "[A-Z]+-[A-Z]+-T[0-9]-[A-Z]+[0-9]"))) : null
コードを以下に変更しようとしましたが、エラーが表示されます。 "Cannot convert lambda expression to the intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type"
Store = a.Type == "Machines" ?
string.Join(",", a.Info.Disk.Select(b => b.Store).
Where(x => Regex.Match(x, "[A-Z]+-[A-Z]+-T[0-9]-[A-Z]+[0-9]")).ToString()) : null
編集:ちょうどこれを試しました:
Store = a.Type == "Machines" ?
string.Join(",", a.Info.Disk.Select(b => b.Store).
Where(x => Regex.IsMatch(x, "[A-Z]+-[A-Z]+-T[0-9]-[A-Z]+[0-9]")).ToList()) : null
エラーは発生しませんが、目的の出力も得られません。
あなたは使用する必要があります
Regex.IsMatch(x, "^[A-Z]+-[A-Z]+-[A-Z]+[0-9]+-[A-Z]+[0-9]+$")
この正規表現がどのように機能するかをご覧ください。
詳細
^
-文字列の開始[A-Z]+
-1つ以上のASCII大文字-
-誇大広告[A-Z]+-
---- 1 + ASCII大文字とハイフン[A-Z]+[0-9]+-
-1つ以上のASCII大文字、1つ以上のASCII数字、そしてハイフン[A-Z]+[0-9]+
-1つ以上のASCII大文字、1つ以上のASCII数字$
-文字列の終わり。コード:
Store = a.Type == "Machines" ?
string.Join(",",
a.Info.Disk
.Select(b => b.Store)
.Where(x => Regex.IsMatch(x, "^[A-Z]+-[A-Z]+-[A-Z]+[0-9]+-[A-Z]+[0-9]+$"))
)
: null;
長い文字列内のどこかで一致が予想される場合は、削除^
して$
アンカーします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加