正则表达式保持变量文本

时间:2013-03-04 05:47:07

标签: c# .net regex

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

用户在框中添加以下文字,然后点击转换

  

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

我还尝试了许多代码变体(删除逗号,删除句点周围的括号等)。这些都不起作用

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

2 个答案:

答案 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