c# - 简单的正则表达式问题 C#

标签 c# .net regex

我需要匹配下面显示的窗口中显示的字符串:

8% of setup_av_free.exe from software-files-l.cnet.com Completed

98% of test.zip from 65.55.72.119 Completed

[numeric]%of[filename]from[hostname | IP address]Completed

正则表达式模式写到一半

if (Regex.IsMatch(text, @"[\d]+%[\s]of[\s](.+?)(\.[^.]*)[\s]from[\s]"))
    MessageBox.Show(text);

现在我需要将以下正则表达式集成到我上面的代码中

ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";  

ValidHostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"; 

2 个正则表达式取自 link .当我使用 Regex.ismatch 匹配 "123.123.123.123"和 "software-files-l.cnet.com"时,这两个正则表达式效果很好。但是,当我将它们都集成到我现有的正则表达式代码中时,我无法让它工作。我尝试了几种变体,但无法使其正常工作。有人可以指导我将 2 正则表达式集成到我现有的代码中吗?提前致谢。

最佳答案

您当然可以将所有这些正则表达式组合成一个,但我不建议这样做。考虑这种方法,首先它会检查您的输入文本总体上是否具有正确的形式,然后它会检查“发件人”部分是 IP 地址还是主机名。

bool CheckString(string text) {
    const string ValidIpAddressRegex = @"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";  

    const string ValidHostnameRegex = @"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"; 

    var match = Regex.Match(text, @"[\d]+%[\s]of[\s](.+?)(\.[^.]*)[\s]from[\s](\S+)");
    if(!match.Success)
        return false;        

    string address = match.Groups[3].Value;

    return Regex.IsMatch(address, ValidIpAddressRegex) ||
           Regex.IsMatch(address, ValidHostnameRegex); 
}

它做你想做的事,比单个怪物大小的正则表达式更具可读性。如果您不打算在循环中调用此方法数百万次,则没有理由担心它的性能不如单个正则表达式。

此外,如果您不知道 \d\s 两边的括号不是必需的。

关于c# - 简单的正则表达式问题 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6294499/

相关文章:

c# - 保存 ASP.net 网页的全局数据

c# - 当站点位于多台服务器上时,每分钟运行自动化任务的最佳方法

c# - 数量字段的数据类型

c# - 更新具有多对多关系的断开连接的实体

c# - 生成 Expression.Assign 以设置小数点时出现异常?从十进制

List<T>.<some action>(objT) 的 C# OnAdd/OnRemove/OnModified 事件

java - 如何使用正则表达式匹配中间也可以有空格的八位数字?

c# - 更改用户控件上的光标

javascript - javascript中的正则表达式匹配反向组

c# - Visual Studio 正则表达式替换重复捕获组