2010-07-12 28 views
0

我从wget中获得了以下字符串“下载:1个文件,8.7K在0s(16.9 MB/s)”并且想要通过对它进行正则表达来模式匹配。perl模式匹配下载:1文件,8.7K in 0s(16.9 MB/s)

我试着用:

/^Downloaded: ([0-9]*) files, ([0-9GK]*) in ([0-9.]*)s ([0-9.]) [KM]B\/s/ 

但它不工作。我将不胜感激任何帮助。谢谢!

+0

当正则表达式失败时,它通常非常简单。它有时可以帮助使用正则表达式测试器并逐渐建立表达式,注意表达式在什么时候无法匹配您所期望的。例如。 http://gskinner.com/RegExr/有这样一个工具。或者Emacs('M-x re-builder')。 – 2010-08-10 07:49:58

回答

2

“下载:1个文件,8.7K在0(16.9 MB/s)的”

不会因为 “8.7K” 小数点匹配/^Downloaded: ([0-9]) files, ([0-9GK]) in ([0-9.]*)s ([0-9.]) [KM]B\/s/ ,和周围的括号下载速度。修改成:

/^Downloaded: (\d+) files, ([0-9.]+[GMK]) in ([0-9.]+)s \(([0-9.]+) [KM]B\/s\)/ 

我也做了这么一些值可以有不止一个数字,你可以是在兆字节的范围文件,以及千字节和千兆字节。

+0

谢谢你们。我刚刚注意到,我在这里提交的正则表达式不是我测试的确切表达式。我其实知道+函数和思考字节范围的选择。但是你让它为我工作。谢谢! – 2010-07-12 15:29:18

+1

@Andreas:那么请接受这个答案。 – 2010-07-12 15:55:31

+0

我很乐意这样做。但是如何? – 2010-07-26 15:06:47

1

[0-9]这样的字符类只匹配单个字符。如果你想要一个或多个,你应该指定[0-9]+。此外,你忘了字符类中的点的大小。您可以使用\d+而不是[0-9]+