以下是一些日志:
2014-12-04T03:44:55.059+0000: 3155402.861: [GC 3155402.861: [ParNew: 52663K->161K(59008K), 0.0037300 secs] 81475K->28973K(104200K), **0.0038550** secs] [Times: user=0.01 sys=0.01, real=0.01 secs]
2014-12-04T04:26:31.955+0000: 3157899.757: [GC 3157899.757: [ParNew: 52641K->161K(59008K), 0.0014220 secs] 81453K->28973K(104200K), **0.0015160** secs] [Times: user=0.01 sys=0.01, real=0.00 secs]
2014-12-04T05:08:48.764+0000: 3160436.567: [GC 3160436.567: [ParNew: 52641K->163K(59008K), 0.0028550 secs] 81453K->28975K(104200K), **0.0029850** secs]
我想过滤'**'
中突出显示的值这是我的正则表达式。它的工作原理除了最后一行
patt = re.compile(r'''\[GC.*([0-9]+\.[0-9]+).secs\].+\[.*''')
这是另一个正则表达式,只适用于最后一行,但没有其他行
patt = re.compile(r'''\[GC.*([0-9]+\.[0-9]+).secs\].?''')
我需要帮助来提出一个通用的reg ex,它将准确地获取值...任何帮助非常感谢
答案 0 :(得分:2)
积极展望将有所帮助
正则表达式可以是
GC.*?([\d.]+)(?= secs\](?: \[Time|$))
(?= secs\](?: \[Time|$)
正面向前看。断言数字后跟secs] [Time
或字符串结尾$
使用示例
>>> str="""2014-12-04T03:44:55.059+0000: 3155402.861: [GC 3155402.861: [ParNew: 52663K->161K(59008K), 0.0037300 secs] 81475K->28973K(104200K), 0.0038550 secs] [Times: user=0.01 sys=0.01, real=0.01 secs]"""
>>> str1="""2014-12-04T05:08:48.764+0000: 3160436.567: [GC 3160436.567: [ParNew: 52641K->163K(59008K), 0.0028550 secs] 81453K->28975K(104200K), 0.0029850 secs]"""
>>> str2="""2014-12-04T04:26:31.955+0000: 3157899.757: [GC 3157899.757: [ParNew: 52641K->161K(59008K), 0.0014220 secs] 81453K->28973K(104200K), 0.0015160 secs] [Times: user=0.01 sys=0.01, real=0.00 secs]"""
>>> re.findall(r'GC.*?([\d.]+)(?= secs\](?: \[Time|$))', str2)
['0.0015160']
>>> re.findall(r'GC.*?([\d.]+)(?= secs\](?: \[Time|$))', str1)
['0.0029850']
>>> re.findall(r'GC.*?([\d.]+)(?= secs\](?: \[Time|$))', str)
['0.0038550']
>>>
答案 1 :(得分:1)
您可以使用positive look-ahead:
>>> re.findall(r' [\d\.]+ (?=sec)',s)
[' 0.0037300 ', ' 0.0014220 ', ' 0.0028550 ']