[英]How can I get a string(Mix of digit and char) up to last digit using regex in python?
[英]How can I get the last two numbers before a string with regex python?
我有一个类似于1 0 0 1 254.79 529 Tm
的模式。 我想获得254.79
和529
(最后到Tm
之前的数字)。 我做了一个能够用\b\d+(?=\s*Tm)
提取数字529
的正则表达式,但我无法获得254.79
。
如何提取 Tm 之前的最后两个数字? 这些数字可以带或不带小数。
我认为您在这里不需要前瞻断言。 这个正则表达式:
/([\d.]+)\s+([\d.]+)\s+Tm/
匹配您的输入。 这是一个 regex101 游乐场,您可以在其中进行试验:
我做了一个简单的代码 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.