2011-11-11 132 views
1

我有字符串。 「12341234115151_log_1.txt」(該字符串長度不固定,但「」日誌「模式始終相同) 我有一個for循環。 每次迭代,我想設置我的「日誌」後的數字。c#中的字符串。替換循環中的某個數字

像 「12341234115151_log_2.txt」 「12341234115151_log_3.txt」 ....

到 「12341234115151_log_123.txt」

在C#

,什麼是這樣做的一個好辦法嗎? 謝謝。

+0

聽起來像是正則表達式一個完美的工作:\ d + _log _(\ d +)TXT – Joe

+0

所以,你想使日誌文件看起來是這樣的:'12341234115151_log_1.txt,12341234115151_log_12.txt,12341234115151_log_123.txt, 12341234115151_log_1234.txt' etc? – John

回答

1

正則表達式對此非常理想。您可以使用Regex.Replace方法並使用MatchEvaluator委託來執行數字增量。

string input = "12341234115151_log_1.txt"; 
string pattern = @"(\d+)(?=\.)"; 
string result = Regex.Replace(input, pattern, 
    m => (int.Parse(m.Groups[1].Value) + 1).ToString()); 

圖案細目如下:

  • (\d+):此匹配,並捕獲任何數字,至少一次
  • (?=\.):這是一個預編這確保一個週期(或點)跟隨數字。一個點必須被轉義成一個文字點而不是正則表達式元字符。我們知道你想增加的值就在「.txt」之前,所以它應該總是有一個點。您也可以使用(?=\.txt)使其更清晰明確,但如果您的文件擴展名可能有不同情況,則可能必須使用RegexOptions.IgnoreCase
0

使用正則表達式來獲取計數器,然後將它們附加在一起。

如果我讀過你的問題吧...

0

怎麼樣,

for (int i =0; i<some condition; i++) 
{ 
    string name = "12341234115151_log_"+ i.ToString() + ".txt"; 
} 
1

您可以使用正則表達式。像這樣

var r = new Regex("^(.*_log_)(\\d).txt$") 
    for ... { 

     var newname = r.Replace(filename, "${1}"+i+".txt"); 
    } 
相關問題