保留可变文本
本文关键字:文本 保留 | 更新日期: 2023-09-27 18:02:16
我已经花了几个小时研究如何做到这一点:
用户将以下文本添加到框中,并单击convert
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个数字
我还尝试了许多代码变体(删除逗号,删除句号周围的括号等),但都不起作用
有什么想法,我做错了吗?
为什么用""
替换没有任何意义,更好的逻辑可以将IP:port
捕获为Regex Group
,然后用第一组$1
替换匹配
outputBox.Text = Regex.Replace(inputBox.Text, @"'d+ ((?:[0-9]{1,3}'.){3}[0-9]{1,3}:'d{1,5}).+", "$1'r'n")
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