【问题标题】:How to extract matching string from large text?如何从大文本中提取匹配字符串?
【发布时间】:2014-12-17 10:15:42
【问题描述】:

我正在开发一个基于WPF,C# and MVVM 的项目。它基本上是一个通过 telnet 的网络设备可配置应用程序。我的 wpf 文本框中有以下输出,我想提取 MAC 地址列值。

active500EM#sh mac-address-table
Read mac address table....
Vlan Mac Address                 Type    Creator   Ports
---- --------------------------- ------- -----------------------
1    00-23-8b-87-9a-6b           DYNAMIC Hardware Ethernet1/0/12
1    00-8c-fa-72-94-b1           DYNAMIC Hardware Ethernet1/0/1
1    3c-43-8e-5c-3e-05           DYNAMIC Hardware Ethernet1/0/8
1    d0-59-e4-b9-e9-3e           DYNAMIC Hardware Ethernet1/0/8
1    f8-f7-d3-00-03-c0           DYNAMIC Hardware Ethernet1/0/8
1    f8-f7-d3-00-03-f0           STATIC  System   CPU
active500EM#

我认为我不能使用正则表达式,因为我没有任何可以匹配的内容。任何帮助和建议都会非常感激。

【问题讨论】:

  • 您考虑使用哪种语言?在命令行中使用awk 会非常快。
  • @fedorqui 它是一个带有 c# 的 WPF 项目,请参阅标签
  • 你可以使用正则表达式!,MAC有一个预定义的格式你可以在linux中使用sed,你可以在excel中导入

标签: c# regex wpf mvvm


【解决方案1】:

使用正则表达式有什么问题?

\b(?<mac_addr>([0-9a-f]{2}-){5}[0-9a-f]{2})\b

那么你可以使用:

var allMacs = Regex.Matches(YOUR_TEXT, REGEX_PATTERN)
                   .Select(m => m.Groups["mac_addr"].Value)
                   .ToList();

获取所有匹配 MAC 地址的List&lt;String&gt;

【讨论】:

    【解决方案2】:
    ^\d+\s+(\S+)
    

    你可以试试这个。抓住捕获或组。查看演示。

    https://regex101.com/r/eZ0yP4/32

    【讨论】:

      【解决方案3】:

      这是快速的正则表达式

      (\w|\d){2}-(\w|\d){2}-(\w|\d){2}-(\w|\d){2}-(\w|\d){2}-(\w|\d){2}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-14
        • 1970-01-01
        • 2023-03-17
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多