正则表达式,替换其他组之间的组?

时间:2015-12-25 21:38:33

标签: c# regex

我有这样的正则表达式:

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,后跟任意数量的字符,后跟端口号。我希望这个“任意数量的字符”被单个冒号“:”取代。怎么做,我对正则表达式不是很有经验......

1 个答案:

答案 0 :(得分: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}
find(被冒号取代的东西):[^0-9].*?
后缀(端口):[0-9]{1,5}