0

私は正規表現が初めてで、私が書いたものは非常に単純なものかもしれませんが、どこが間違っているのかわかりません。

@"^([a-zA-Z._]+)@([\d]+)"

この RE は、次の文字列用です。

somename@somenumber

今、somename と somenumber を取得しようとしています。これは私がしたことです:

ac.name = m.Groups[0].Value;
ac.number = m.Groups[1].Value;

ここで、ac.name は完全な文字列を読み取り、 ac.numberはsomenumber を読み取ります。ac.name のどこが間違っていますか?

4

5 に答える 5

2

正規表現は正しいと思いますが、問題は、グループ 1 からではなく、文字列全体であるグループ (0) から ac.name を取得することです。これを試して:

ac.name = m.Groups[1].Value;
ac.number = m.Groups[2].Value;
于 2012-08-03T08:01:00.937 に答える
1

この正規表現は正しいです。あなたの間違いはどこかにあると思います。あなたはC#を使用しているようです。したがって、言語での正規表現の使用法について考える必要があります。

MSDNのコードサンプルを見ると、アクセス中にゼロベースではなく1ベースのインデックスを使用する必要がありますGroups(ケントも提案しました)。したがって、これを使用します。

String name   = m.Groups[1].Value;
String number = m.Groups[2].Value;
于 2012-08-03T08:00:12.940 に答える
1

この正規表現を使用します(\w+)@(\d+([.,]\d+)?)

Groups[1]名前が含まれます

Groups[2]番号が含まれます

于 2012-08-03T08:08:39.970 に答える
0

これがC#の場合は、^なしで試してください

([a-zA-Z\._]+)@([\d]+)

試してみたところ、正しくグループ化されました

更新:エスケープしました。

一致するものが1つだけ(したがって、元の式の^)が必要な場合は、メソッド.Matchの代わりにを使用します。正規表現クラスに関するMSDNドキュメントを.Matches参照してください。

于 2012-08-03T08:04:40.353 に答える
0

+をキャプチャ グループに移動する必要があると思います。

@"^([a-zA-Z._]+)@([\d]+)"
于 2012-08-03T07:53:18.430 に答える