Python 不清楚的正则表达式行为

标签 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() 输出[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/

相关文章:

python - Spotify - 删除使用 None 值创建的访问 token

java - 如何仅在单行上匹配正则表达式模式?

python - 使用 Python 从电子邮件正文中提取 URL?

java - 仅当负前瞻和负后瞻都满足时才拆分字符串

python - 如何将 key 输入终端以进行单元测试

将两个元组列表合并为单个字典列表的Pythonic方法

python - 更改 RStudio 的默认 python 版本

python - 尝试从 pandas 数据帧创建嵌套字典

Ruby 正则表达式多次重复捕获

python - re.search 多行 Python