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

我有一個很大的文本文件,有很多這樣的行。有人可以幫助我如何建立正則表達式,以便我可以提取數字'800000000'正則表達式提取電話號碼

從和到的電話號碼將是不同

我總是需要它由to

follwed目前我分割線在空的空間,然後通過數組,我覺得是非常低效的迭代次數。

+1

如果你知道到底是什麼性質的電話號碼開始和結束對於每一行,那麼這可能比正則表達式更有效。 – vcsjones 2012-04-24 16:40:47

+0

@vcsjones:同意;如果所有線路看起來都像這樣,那麼至少可以通過電話號碼將其視爲固定長度。 – KeithS 2012-04-24 16:44:07

+0

nope。除此之外還有許多其他線路。我只對這種格式的行感興趣。 – Sandeep 2012-04-24 16:44:59

回答

0

嘗試to '(\d{9})。這將匹配文本to '之後的連續9位數字序列,並將結果存儲在第一個捕獲組中。

+0

這將匹配從和數字。這個問題明確地說只有數字應該匹配。 – 2012-04-24 16:53:52

+0

對不起,我編輯了我的回覆 – LukeGT 2012-04-24 16:58:28

0

This Works。我不知道你的輸入是如何變化的...

 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

(話雖如此,我不知道它比分割線更有效率,正則表達式並不完全是效率模型) – Shlomo 2012-04-24 16:53:19

+1

您並不需要第一個和第三個捕獲組,你可以簡單地使用:'「^ sch 2012-04-24 16:54:23

+0

謝謝。用這些更新編輯。 – Shlomo 2012-04-24 17:00:27

0

看起來夠簡單。我會從文件中取出一個「樣本」行,並將其轉換爲正則表達式,用指明您感興趣的數據類型的特殊字符來標記和替換真實數據。具體來說,您說要捕獲「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>約定爲其命名。

0

首先你必須得到的對數的整場比賽:

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

之後,你必須從比賽得到一組。你最好帶一組命名如下:

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

用於獲取電話號碼,以看起來是這樣的一種實現:

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; 
}