繁体   English   中英

如何使用正则表达式 python 获取字符串前的最后两个数字?

[英]How can I get the last two numbers before a string with regex python?

我有一个类似于1 0 0 1 254.79 529 Tm的模式。 我想获得254.79529 (最后到Tm之前的数字)。 我做了一个能够用\b\d+(?=\s*Tm)提取数字529的正则表达式,但我无法获得254.79

如何提取 Tm 之前的最后两个数字? 这些数字可以带或不带小数。

我认为您在这里不需要前瞻断言。 这个正则表达式:

/([\d.]+)\s+([\d.]+)\s+Tm/

匹配您的输入。 这是一个 regex101 游乐场,您可以在其中进行试验:

https://regex101.com/r/7DXK3E/1

我做了一个简单的代码 python。 你可以参考:

import re

regex = re.compile(r"((\d+)[.](\d+))(\s*)(\d+)(\s*)Tm")
test_str = "1 0 0 1 254.79 529 Tm"
m_test = regex.search(test_str)

if m_test is not None:
    print(m_test[1])
    print(m_test[5])

图像结果: 结果

您可以在 regex101 尝试您的想法。 这是我为你做的一个例子,我认为这应该足以让你升级自己。

https://regex101.com/r/upLSG4/1

祝你好运!!!

如果您只想使用前瞻来获得匹配,则在匹配Tm之前的前瞻中应该有一个可选部分

\b\d+(?:\.\d+)?(?=(?:\s+\d+(?:\.\d+)?)?\s+Tm\b)

正则表达式演示

另一种选择是使用 2 个捕获组。

\b(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?) Tm\b
  • \b一个词的边界
  • (\d+(?:\.\d+)?)捕获第 1 组中带有可选部分的数字
  • \s+匹配 1+ 个空格字符
  • (\d+(?:\.\d+)?)捕获第 2 组中带有可选部分的数字
  • \s+Tm\b匹配 1+ 个空白字符、 Tm和一个单词边界

正则表达式演示

例子

import re

pattern = r"\b(\d+(?:\.\d+)?)\s+(\d+(?:\.\d+)?) Tm\b"
s = "1 0 0 1 254.79 529 Tm"
print(re.findall(pattern, s))

Output

[('254.79', '529')]

以下正则表达式应该可以解决问题:

[0-9.]+\s+[0-9.]+(?=\s*Tm)

解释:

  • 我使用[0-9.]+来捕获一个数字,我将其松散地定义为一个或多个数字或点的序列。 这有点松懈,因为它也会接受3.4.5 如果你想排除这个,你需要一个更严格的 RE。 对于如此严格的 RE,请参阅此问题的其他答案。

  • 我使用\s+来匹配两个数字之间的一个或多个空格。

  • 在 0 个或多个空格之后,我保留了您原来的循环,以便在末尾找到Tm

PS:这个答案重复了已经提供的其他一些答案,但应 OP 的要求,我将我的初始评论升级为答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM