我的 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() 输出[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
最佳答案
您添加的.+
需要更改为.*
。
+
运算符要求至少有一个字符,而*
则接受零个或多个字符。
关于Python 不清楚的正则表达式行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10750562/