我已经看过如何在java中做到这一点,但是没有成功获得结果或者找到关于如何使用C#执行此操作的答案,所以就这样了。
我有一个定期ping结果的字符串:
var result = "PING skye.net (xxx.xxx.xxx.xxx): 200 data bytes" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 ttl=253 time=1.759 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=253 time=2.075 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=2 ttl=253 time=1.843 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=3 ttl=253 time=1.803 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=4 ttl=253 time=17.898 ms" +
"--- skye.net ping statistics ---" +
"5 packets transmitted, 5 packets received, 0% packet loss" +
"round-trip min/avg/max = 1.759/5.075/17.898 ms";
我希望通过一次Regex.Match或Regex.Matches调用获得传输,接收和丢失结果。
对于每个部分,我都有单独的正则表达式模式:
- (\ d +)\ spackets \ stransmitted
- (\ d +)\ spackets \ sreceived
- (\ d +%)\ spacket \ sloss
它们可以与Regex.Match一起使用。
所以不要这样做:
var result = "PING skye.net (xxx.xxx.xxx.xxx): 200 data bytes" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 ttl=253 time=1.759 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=253 time=2.075 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=2 ttl=253 time=1.843 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=3 ttl=253 time=1.803 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=4 ttl=253 time=17.898 ms" +
"--- skye.net ping statistics ---" +
"5 packets transmitted, 5 packets received, 0% packet loss" +
"round-trip min/avg/max = 1.759/5.075/17.898 ms";
const string patternForTransmitted = @"(\d+)\spackets\stransmitted";
const string patternForReceived = @"(\d+)\spackets\sreceived";
const string patternForLoss = @"(\d+%)\spacket\sloss";
var transmitted = Match(patternForTransmitted, result);
var received = Match(patternForReceived, result);
var loss = Match(patternForLoss, result);
我想做这样的事情:
var result = "PING skye.net (xxx.xxx.xxx.xxx): 200 data bytes" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 ttl=253 time=1.759 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=253 time=2.075 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=2 ttl=253 time=1.843 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=3 ttl=253 time=1.803 ms" +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=4 ttl=253 time=17.898 ms" +
"--- skye.net ping statistics ---" +
"5 packets transmitted, 5 packets received, 0% packet loss" +
"round-trip min/avg/max = 1.759/5.075/17.898 ms";
var pattern = @"((\d+)\spackets\stransmitted)((\d+)\spackets\sreceived)((\d+%)\spacket\sloss)";
var matches = Regex.Matches(pattern, result);
可行吗?
谢谢。
答案 0 :(得分:0)
正则表达式是这样的:
var pattern =@"((\d+)\spackets\stransmitted)|((\d+)\spackets\sreceived)|((\d+%)\spacket\sloss)";
答案 1 :(得分:0)
答案 2 :(得分:0)
@Oleh的答案是正确的,但如果你只需要数值,那就试试这个:
var pattern = @"(\d+)\spackets\stransmitted|(\d+)\spackets\sreceived|(\d+%)\spacket\sloss"
答案 3 :(得分:0)
这有效:
var result = "PING skye.net (xxx.xxx.xxx.xxx): 200 data bytes " +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=0 ttl=253 time=1.759 ms " +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=1 ttl=253 time=2.075 ms " +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=2 ttl=253 time=1.843 ms " +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=3 ttl=253 time=1.803 ms " +
"208 bytes from xxx.xxx.xxx.xxx: icmp_seq=4 ttl=253 time=17.898 ms " +
"--- skye.net ping statistics --- " +
"5 packets transmitted, 6 packets received, 7% packet loss " +
"round-trip min/avg/max = 1.759/5.075/17.898 ms ";
var pattern = @"(\d+)\spackets\stransmitted, (\d+)\spackets\sreceived, (\d+%)\spacket\sloss";
var matches = Regex.Match(result, pattern);
Console.WriteLine(matches.Groups[1].Captures[0].Value);
Console.WriteLine(matches.Groups[2].Captures[0].Value);
Console.WriteLine(matches.Groups[3].Captures[0].Value);
您可以调整空白等,但我认为现在的关键是访问返回结果中的组。你的电话中也有结果和模式反转。
我也会从捕获中取出%
,但那就是我。