Python 3.x 正则表达式在多个字符串的末尾查找数字
下面是我的字符串,它来自一个标准输出 我正在寻找一种方法来查找传感器的所有十进制数。我想提供我的正则表达式模式“TP1”,并希望我的返回结果如下所示: [156.2,30] 我使用的是re.findall() 我可以找到字符串的结尾,但不能使用输入:请参见此处: 这是我正在尝试的代码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
\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']