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