好的,所以我一直在寻找如何做到这一点的几个小时:
用户在框中添加以下文字,然后点击转换
1 127.0.0.1:8080这里有一些随机垃圾127.0.0.1
2 255.255.255.255:80随机垃圾是不同的每一行www.example.com
3 98.76.54.32:1010 blah blah blah 98.76.54.32
使用此代码:
outputBox.Text = Regex.Replace(inputBox.Text, "^[[0-9]{1,3},[.],[0-9]{1,3},[.],[0-9]{1,3},[.],[0-9]{1,3},[:],[0-9]{1,5}]+", "");
它应该变成这个:
127.0.0.1:8080
255.255.255.255:80
98.76.54.32:1010
但是输出框显示的内容与输入的内容完全相同
所有所需文本的唯一共同点是它是
1-3个数字跟随一个句号(x3)然后1-3个数字后跟冒号后跟1-5个数字
我还尝试了许多代码变体(删除逗号,删除句点周围的括号等)。这些都不起作用
关于我做错了什么的任何想法?
答案 0 :(得分:2)
为什么替换为""
没有任何意义,可以将IP:port
作为Regex Group
捕获更好的逻辑,然后将匹配替换为第一组$1
< / p>
outputBox.Text = Regex.Replace(inputBox.Text, @"\d+ ((?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d{1,5}).+", "$1\r\n")
答案 1 :(得分:0)
string haystack = "127.0.0.1:8080 this is some ip and port 127.0.0.1";
Regex needle = new Regex("[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}([:][0-9]{2,5})?");
string output = String.Empty;
string[] lines = haystack.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
foreach (string line in lines)
{
if (needle.IsMatch(line))
{
output += needle.Match(line).ToString() + Environment.NewLine;
}
}
// output 127.0.0.1:8080