1

文字列の形式に一致する正規表現を書き込もうとしています:

"[A-Za-z][A-Za-z]-[A-Za-z][A-Za-z]_[match all chars]"

一致させたい文字列は、ハイフンとアンダースコアを含むこの形式である必要があります。これまでのところ私は持っています:

Regex regEx = new Regex(@"[A-Za-z]+(-[A-Za-z]+)+*$", RegexOptions.IgnorePatternWhitespace);

これが一致するようにアンダースコア文字を追加する方法がわかりません。

この要素は、一致させたいXML要素です。この要素の内容も取得したいと思います。どうすればこれを行うことができますか?

var newVar = from e in doc.Descendants("DocumentElement").Descendants() 
                         where regEx.IsMatch(e.Name.LocalName) 
                        select e;
4

4 に答える 4

7

私が使用します

@"^[A-Za-z]{2}-[A-Za-z]{2}_.*$"

説明:

  • ^行頭
  • [A-Za-z]{2}正確に2文字はa-zA-Zでなければなりません
  • -ダッシュ
  • _アンダースコア
  • .*任意の文字
  • $行の終わり

編集:

正規表現のドキュメントも参照してください

于 2012-04-19T09:44:23.453 に答える
2

あなたの例のパターンは、2ではなく「1以上」である+修飾子を使用しています。それはあなたが思っている以上に一致します。

Regex regEx = new Regex(@"^[A-Za-z]{2}-[A-Za-z]{2}_.*$", RegexOptions.IgnorePatternWhitespace);

または、大文字と小文字を区別しないオプションも次のように設定します。

Regex regEx = new Regex(@"^[a-z]{2}-[a-z]{2}_.*$", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
于 2012-04-19T10:01:43.073 に答える
1

私はあなたが望む正規表現は次のとおりだと信じています:

new Regex(@"^[A-Z][A-Z]-[A-Z][A-Z]_", RegexOptions.CaseInsensitive);

これはキャプチャする必要があります:
^[A-Z][A-Z]最初
-の2つのアルファ文字リテラルハイフン文字
[A-Z][A-Z]さらに2つのアルファ文字
_リテラルアンダースコア文字

このxmlタグの名前全体をキャプチャする必要はないので、.*$「文字列の最後まで他の文字」の部分をキャプチャする必要はありません。

于 2012-04-19T09:47:02.913 に答える
1

この正規表現を参照してください。

nregex.comでテスト済み

^[A-Za-z]+(-[A-Za-z]+_[A-Za-z]{2})$

ここで重要なこと:-

  • 文字列の最後の部分は2文字で修飾されます(2文字を正確に気にしない場合は、これを+に置き換えてください)。

これにより、キャプチャも実行されます。

于 2012-04-19T09:47:28.243 に答える