2012-04-24 15 views
1
<CallInfo info: from '600000000', to '800000000', forwardedFrom '', display '', category '1', tollCategory '2',callingNumberRestricted false, custom '', receivingComplete true> -- (SUCCESS) 

私はそのような行が多い巨大なテキストファイルを持っています。 Regexを構築して番号'800000000'を抽出できるように助けてもらえますか?正規表現で電話番号を抽出する

電話番号と電話番号は、と異なるとなります。

私はいつも、現在、私は空のスペースで行を分割し、その後、私は非常に非効率的であると感じ配列を反復処理していますto

によってfollwedされる番号が必要です。

+1

:電話番号-のを取得するための実装は、このようになります

, to '(?<toNumber>[0-9]{9})', 

:あなたはより良いこのような名前のグループを取りますそれぞれの行のためにそれはおそらくRegexより効率的です。 – vcsjones

+0

@vcsjones:同意しました。すべての行がこのように見える場合は、少なくとも電話番号で固定長として扱うことができます。 – KeithS

+0

nope。これ以外にも多くの行があります。私はこのフォーマットのラインだけに興味があります。 – Sandeep

答えて

0

お試しto '(\d{9})これは、テキストto 'の後の行の9桁のシーケンスと一致し、その結果を最初の取得グルー​​プに格納します。

+0

これはfromとtoの両方に一致します。質問には、to番号のみが一致する必要があることが具体的に記載されています。 –

+0

申し訳ありませんが、私は – LukeGT

0

これは機能します。あなたの入力がどのように変化しているかわかりません...

 string s = "<CallInfo info: from '600000000', to '800000000', forwardedFrom '', display '', category '1', tollCategory '2',callingNumberRestricted false, custom '', receivingComplete true> -- (SUCCESS)"; 

     Regex r = new Regex("^<CallInfo.* to '(\\d{9})'"); 
     var match = r.Match(s); 
     var number = match.Groups[1]; 
+0

の応答を編集しました(私はそれが分かれているよりも効率的ではないと言いましたが、Regexはまさに効率のモデルではありません) – Shlomo

+1

本当に最初と3番目のキャプチャグループは必要ありません'^ sch

+0

ありがとうございます。これらのアップデートで編集されました。 – Shlomo

0

簡単に見えます。私はあなたのファイルから "サンプル"行を取ってRegexに入れ、実際のデータをマーキングし、あなたが興味を持っているデータの種類を示す特殊文字に置き換えます。具体的には、 "to次のコードでは 『数字:「電話番号

@"^<CallInfo info: from '\d{1,9}', to '(?<toNumber>\d{1,9})', forwardedFrom '.*?', display '.*?', category '.*?', tollCategory '.*?', callingNumberRestricted (?:true|false), custom '.*?', receivingComplete (?:true|false)> -- \(SUCCESS\)$" 

Regex.Matchを()を使用して、このパターンに対して、ファイル全体を実行するには、あなたはのリストを生成することができます』:

List<string> toNumbers = Regex.Match(contentsOfFile, pattern).Groups["toNumber"].ToList(); 

することができます簡単な解析で数値を実際の数値に変換します。

List<ulong> toNumbersAsLongs = toNumbers.Select(s=>ulong.Parse(s)).ToList(); 

このファイルの他のデータが必要な場合は、そのフィールドをかっこで囲んで、?<captureName>の規則に従って名前を付けるだけです。あなたは試合からグループを取得する必要がありますその後

, to '[0-9]{9}', 

0

まずあなたがto-数の全試合を取得する必要があります。あなたは電話番号が始まり、で終わる正確に何文字わかっている場合

string regex = ", to '(?<toNumber>[0-9]{9})',"; 
string text = "<CallInfo info: from '600000000', to '800000000', forwardedFrom '', display '', category '1', tollCategory '2',callingNumberRestricted false, custom '', receivingComplete true> -- (SUCCESS)"; 
string toNumber = string.Empty; 

Match match = Regex.Match(text, regex); 
if (match.Success) 
{ 
    toNumber = match.Groups["toNumber"].Value; 
} 
関連する問題