我想使用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并不了解,也无法在网上找到合适的例子,那么如何以正确的方式做到这一点呢?
答案 0 :(得分:1)
答案 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
这假设“名称”部分都不包括数字。