我有这样的正则表达式:
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 :(得分: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}