Python 3.x 正则表达式在多个字符串的末尾查找数字

Python 3.x 正则表达式在多个字符串的末尾查找数字,python-3.x,regex,re,Python 3.x,Regex,Re,下面是我的字符串,它来自一个标准输出 我正在寻找一种方法来查找传感器的所有十进制数。我想提供我的正则表达式模式“TP1”,并希望我的返回结果如下所示: [156.2,30] 我使用的是re.findall() 我可以找到字符串的结尾,但不能使用输入:请参见此处: 这是我正在尝试的代码 \d+\.\d+?$ 通过标志启用多行模式:在regex101.com上,该选项位于模式输入字段的右侧(默认情况下,您可以在此处看到/g。在Python中使用regex时,您可以将标志作为第三个参数传递给re.f

下面是我的字符串,它来自一个标准输出

我正在寻找一种方法来查找传感器的所有十进制数。我想提供我的正则表达式模式“TP1”,并希望我的返回结果如下所示:

[156.2,30]

我使用的是re.findall()

我可以找到字符串的结尾,但不能使用输入:请参见此处:

这是我正在尝试的代码

\d+\.\d+?$

通过标志启用多行模式:在regex101.com上,该选项位于模式输入字段的右侧(默认情况下,您可以在此处看到
/g
。在Python中使用regex时,您可以将标志作为第三个参数传递给
re.findall()

重新导入
传感器=“TP1”
text=”“”
TP1 BCArc 156.2
TP2最大输出:此处为0.01
TP3一些:这里的其他示例1 30.70
TP1 BCArc 30
TP2最大输出:此处为2.22
"""
re.findall(fr'^{sensor}\s+\w+\s+([\d\.]+)$”,文本,re.MULTILINE)
#返回值['156.2','30]

所有标志都在中描述。

您也可以直接拆分文本

鉴于:

txt = """\
TP1   BCArc                                    156.2
TP2   Max: of output here                      0.01
TP3   some:other example 1 here                30.70
TP1   BCArc                                    30
TP2   Max: of output here                      2.22
"""
你可以做:

>>> [sl[-1] for sl in (line.split() for line in txt.splitlines()) if sl[0]=='TP1']
['156.2', '30']

将您的正则表达式/代码放入问题本身是一个好主意。如果正则表达式101下降,则问题对未来的访问者不再有价值。此外,链接中的测试字符串看起来也不同--
Th1c
而不是
TP1
?谢谢!在flags@JanWilamowski你能解释一下怎么做吗?我添加了一个完整的解释作为答案。你的问题被标记为Python,但你只提供了一个非常基本的正则表达式-请分享你使用这个正则表达式的Python代码,因为它会影响你需要的答案。不过OP要求输出为
[156.2,30]
。我认为问题还不清楚。
re.findall(r“^TP1.+([\d.]+)$”,text,re.MULTILINE)
可能就是他们想要的。是的,这并不能解决确切的问题。每一行都需要从感兴趣的传感器开始,本例为“TP1”。返回值应仅为[156.2,30]我更新了我的答案,以包括和参数化的传感器interest@JanWilamowski我会添加一个
^
,以确保传感器位于测线的起点。您可以将我建议的模式的全部或部分作为编辑,因为这正是OP想要的。不,您的模式对我来说已经足够了。请注意,如果人们使用插值方法ach,可能需要转义特殊的正则表达式字符以避免意外行为,例如,如果传感器恰好是
“C++”
或引起
re的类似事件。错误:在位置3多次重复。
>>> [sl[-1] for sl in (line.split() for line in txt.splitlines()) if sl[0]=='TP1']
['156.2', '30']