一定数量的数字后的正则表达式编号

时间:2014-12-17 10:30:00

标签: regex search expression

我想使用Regex过滤ChkDsk扫描的百分比。问题是由于语言的原因,输出可能因系统而异,因此我唯一的选择就是按数字过滤它。

示例输出可能如下所示:

Progress: 45836 of 509696 done; Stage:  8%; Total:  3%; ETA:   0:23:47 .  \r\n
Progress: 45836 of 509696 done; Stage:  8%; Total:  30%; ETA:   0:23:47 .  \r\n
Progress: 45836 of 509696 done; Stage:  8%; Total:  40%; ETA:   0:23:47 .  \r\n
Progress: 45836 of 509696 done; Stage:  8%; Total:  55%; ETA:   0:23:47 .  \r\n
Progress: 45836 of 509696 done; Stage:  8%; Total:  100%; ETA:   0:23:47 .  \r\n

我的想法是只抓住字符串中的第四个数字,那会有效吗? 遗憾的是,我对Regex并不了解,也无法在网上找到合适的例子,那么如何以正确的方式做到这一点呢?

5 个答案:

答案 0 :(得分:1)

:\s([^ ;]+);(?![^%\n]*%)

试试这个。抓住捕获或组。参见演示。

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

答案 1 :(得分:1)

你可以这样做:

^(?:\D*\d+){3}\D*(\d+)

https://regex101.com/r/aN3xB6/1

这里我从该行的开头开始,在捕获您想要的数字之前捕获3个非数字序列\D和数字\d

答案 2 :(得分:1)

你可以使用&#34 ;;"作为分隔符并采取第三列(可能比复杂的正则表达式更可读)...

$cat testdata | awk -F';' '{print $3}'
 Total: 3%
 Total: 30%
 Total: 40%
 Total: 55%
 Total: 100%

答案 3 :(得分:0)

.*\s(\d+)%

试试这个正则表达式!第1组将为您提供一个数字的最后一个出现,该数字前面有一个空格,后跟一个%char。这与语言无关。如果您无法确定,这两个百分比在您的邮件中按此顺序排列,我认为您不会有一般解决方案,因为它们看起来都一样 - 语言特定前缀或其顺序是什么它们之间有所不同。

答案 4 :(得分:0)

如何操作取决于您使用的风味/语言。但是如果你使用一个简单的正则表达式来返回数字序列:

\b[0-9]+\b

然后返回第4个实例,你应该得到你的价值。

在vbscript中,代码可能如下所示:

Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "\b[0-9]+\b"
If myRegExp.Test(SubjectString) Then
    Set myMatches = myRegExp.Execute(SubjectString)
    ResultString = myMatches(3).Value
End If

这假设“名称”部分都不包括数字。