2009-05-19 22 views
0

私はregexで電話番号を解析しようとしています。正確に私はこのような機能を使用して、その中に電話番号の文字列を取得したい:番号を非捕捉グループでRegexで解析する

string phoneRegex = @"^([+]|00)(\d{2,12}(?:\s*-*)){1,5}$"; 
string formated = Regex.Match(e.Value.ToString(), phoneRegex).Value; 

あなたが見ることができるように、私は非キャプチャグループを使用しようとしている(?:\よ* - *)のが、私は」何か間違っている。

期待resoultにすべきである:

入力(e.Value):+48 123 234 344または+48 123234344または+48 123-234-345

出力:48123234344人の

おかげ事前に任意の提案をしてください。

答えて

2

Regex.Matchは文字列を変更しません。それは単にそれにマッチするでしょう。あなたは電話番号の文字列を持っていると、不要な文字を削除することによって、それをフォーマットしたい場合は、Regex.Replaceメソッドを使用したいと思うでしょう:電話番号がハードコードされている私のサンプルで

// pattern for matching anything that is not '+' or a decimal digit 
string replaceRegex = @"[^+\d]"; 
string formated = Regex.Replace("+48 123 234 344", replaceRegex, string.Empty); 

を、それだけのためですデモンストレーションの目的。

注釈として、上のコードサンプルでは、​​正規表現は国コードが2桁であると仮定しています。これはそうでないかもしれません。米国には1桁のコード(1)があり、多くの国には3桁のコードがあります(おそらくそれ以上の数字の国もあります)。

+0

をあなたは私がちょうど正規表現から多くを期待されると考え、正しいです:P ...はい、私は電話番号の形式国際(別の国コードを作成しようとしているがサポートされています。コードの後半)。 – kyrisu

0

これは動作するはずです:

Match m = Regex.Match(s, @"^([+]|00)\(?(\d{3})\)?[\s\-]?(\d{3})\-?(\d{4})$"); 
return String.Format("{0}{1}{2}{4}", m.Groups[1], m.Groups[2], m.Groups[3], m.Groups[3]); 
関連する問題