2015-12-25 24 views
1

我有這樣的正則表達式:正則表達式,替換其他組之間的組?

string ipPort = @"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}[\s\S]*?[0-9]{1,5}"; 
Regex Rx = new Regex(ipPort,RegexOptions.Singleline); 
List<string> catched = new List<string>(); 

foreach (Match ItemMatch in Rx.Matches(page)) 
{ 
    catched.Add(ItemMatch.ToString()); 
} 

它會找到IP,後跟任意數量的字符,後跟端口號。我想把這個「任意數量的字符」替換成單個冒號「:」。如何做到這一點,我不是很有經驗的正則表達式...

回答

0

您可以使用使用lookarounds爲了這個一般表達式找到的前綴和後綴之間的模式:

(?<=prefix)find(?=suffix) 

適用於您的具體問題:

(?<=[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})[^0-9].*?(?=[0-9]{1,5}) 

注意,我添加了一個[^0-9]意思是「不是一個數字」。那裏必須至少有一個非數字字符,否則搜索不能區分屬於最後一個ip-group的數字和端口號。

您也可以重複數點組三次,然後追加第四號

(?<=([0-9]{1,3}\.){3}[0-9]{1,3})[^0-9].*?(?=[0-9]{1,5}) 

您也可以替換[\s\S]通過.(任何字符)(空間或非空格字符)。

應用到我們的一般表述,現在我們有:

前綴(IP):([0-9]{1,3}\.){3}[0-9]{1,3}
發現(東東結腸代替):[^0-9].*?
後綴(端口):[0-9]{1,5}