python - "match anything until a specific character, then work your way backwards"怎么说?

标签 python regex python-3.x

我经常遇到这样的模式,其中有趣的部分由特定字符分隔,其余部分无关紧要。一个典型的例子:

/dev/sda1       472437724  231650856 216764652  52% /

我想通过说 “匹配任何内容,然后当您到达 %(在该行中是唯一的)时,请参阅前面的内容以提取匹配项”

我试过 code this.*(\d*)%.* 但组不匹配:

  • .* 匹配任意次数
  • % ... 直到你到达乱码 %(\d 也与 匹配。* 但我的理解是,一旦 % 匹配,正则表达式引擎将向后工作,因为它现在有一个“ anchor ”,可以在其上分析之前的内容——请指出这个推理是否不正确,谢谢)
  • (\d*) ... 现在在 % 之前你有一个 (\d*) 来匹配和分组
  • .* ...其余的都不重要(匹配所有内容)

最佳答案

您的正则表达式不起作用,因为 . 匹配太多,而组匹配太少。由于 * 量词,组 \d* 基本上可以匹配 nothing,而 . 匹配所有内容。

您对 .* 的描述有些不正确。它实际上匹配所有内容直到结束,然后向后移动直到它之后的内容 ((\d*).*) 匹配。有关详细信息,请参阅 here .

事实上,我认为您的文字可以简单地通过以下方式匹配:

(\d{1,3})%

并获得第 1 组。

“继续寻找直到找到...”的逻辑有点融入了正则表达式引擎,所以你不需要明确地说 .* 除非你想在匹配中使用它.在这种情况下,您只需要 % 之前的数字对吗?

关于python - "match anything until a specific character, then work your way backwards"怎么说?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57328413/

相关文章:

ruby - 如何在 ruby​​ 中匹配多个正则表达式模式

java - 如何在 Java 中删除 HTML 标签

python - 使用随机生成的变量对函数进行 doctest

python - 替换列表中的所有负值

python - 如何创建 pandas 数据透视表

python - 如何使用 rest_framework.test.APITestCase 发送多个文件

python - 如何在 django url 中将一个 url 限制为仅一个 View

Python for 循环访问 GPIO 引脚

Ping 结果的 Java 正则表达式

linux - Linux [Ubuntu 16.04]-为Anaconda Python3安装MATLAB引擎