0

好的,所以我一直在寻找如何做到这一点的几个小时:

用户将以下文本添加到框中并单击转换

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 位数字

我还尝试了许多代码变体(删除逗号、删除句点周围的括号等)。

关于我做错了什么的任何想法?

4

2 回答 2

2

为什么用""没有任何意义替换,可以捕获更好的逻辑IP:portRegex Group然后用第一组替换匹配$1

outputBox.Text = Regex.Replace(inputBox.Text, @"\d+ ((?:[0-9]{1,3}\.){3}[0-9]{1,3}:\d{1,5}).+", "$1\r\n")
于 2013-03-04T05:55:09.053 回答
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
于 2013-03-04T05:55:00.367 回答