如何从大文本中提取匹配的字符串?

时间:2014-12-17 10:15:42

标签: c# regex wpf mvvm

我正在开发一个基于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#

我认为我不能使用正则表达式,因为我没有任何东西可以匹配。任何帮助和建议都会非常明显。

3 个答案:

答案 0 :(得分:5)

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

\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<String>

答案 1 :(得分:2)

^\d+\s+(\S+)

你可以尝试一下。抓住捕捉或小组。参见演示。

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

答案 2 :(得分:1)

这是快速的正则表达式

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