Python不清楚正则表达式行为

时间:2012-05-25 07:49:28

标签: python regex

我有python正则表达式的问题。 regxe buddy的结果似乎很好,但在python中失败了。

我必须匹配的数据集是一个列表:

['  101  0.  0.\n',
 '  0.  100.\n',
 '  1.  98.5107805\n',
 '  2.  97.0464459\n',
 '  3.  95.6065328\n', ... ]

我必须从第二行开始获取所有数字。 为此,我使用了:

pattern = compile(r'\s*(?P<raw_time>\d*\.?\d*)\s+(?P<raw_value>\d*\.\d*)')

一切正常。我遍历列表并获得“raw_time”中的第一个值,并在每个行的“raw_value”中获得第二个值。 然后我应该扩展这个术语以使用加权数据。

所以数据转向:

['  101  0.  0.\n',
 '  0.  100.  1\n',
 '  1.  98.5107805  1\n',
 '  2.  97.0464459  1\n',
 '  3.  95.6065328  1\n', ... ]

我仍然需要解析两个第一个参数。所以我把模式改为:

pattern = compile(r'\s*(?P<raw_time>\d*\.?\d*)\s+(?P<raw_value>\d*\.\d*).+')

除1之外的所有行都可以正常工作。

工作:

In [35]: pattern.search('1.  98.5107805  1\n').groupdict()
Out[35]: {'raw_time': '1.', 'raw_value': '98.5107805'}

工作:

In [37]: pattern.search('  0.  100.  1\n').groupdict()
Out[37]: {'raw_time': '0.', 'raw_value': '100.'}

工作:

在[44]中:pattern.search('1.98.5107805 \ n')。groupdict()    Out [44]:{'raw_time':'1。','raw_value':'98 .510780'}

不工作:

In [46]: pattern.search('  0.  100.\n').groupdict()
Out[46]: {'raw_time': '', 'raw_value': '0.'}

我非常依赖正则表达式(确定,演示,但到目前为止它与python一致)。

么?

TNX

1 个答案:

答案 0 :(得分:2)

您添加的.+需要更改为.*

+运算符需要至少一个字符,而*将接受零或更多。