[英]Python regex Get first element after specific string
我試圖在特定模式之后獲取第一個數字(int 和 float):
strings = ["Building 38 House 10",
"Building : 10.5 house 900"]
for x in string:
print(<rule>)
想要的結果:
'38'
'10.5'
我試過了:
for x in strings:
print(re.findall(f"(?<=Building).+\d+", x))
print(re.findall(f"(?<=Building).+(\d+.?\d+)", x))
[' 38 House 10']
['10']
[' : 10.5 house 900']
['00']
但我錯過了一些東西。
您可以使用捕獲組:
\bBuilding[\s:]+(\d+(?:\.\d+)?)\b
解釋
\bBuilding
匹配單詞Building
[\s:]+
匹配 1+ 個空格字符或冒號(\d+(?:\.\d+)?)
捕獲組 1,匹配 1+ 位與可選的小數部分\b
一個詞的邊界import re
strings = ["Building 38 House 10",
"Building : 10.5 house 900"]
pattern = r"\bBuilding[\s:]+(\d+(?:\.\d+)?)"
for x in strings:
m = re.search(pattern, x)
if m:
print(m.group(1))
輸出
38
10.5
使用\D
(否定\d
)匹配其間的任何非數字並捕獲數字的想法:
Building\D*\b([\d.]+)
請參閱 regex101 上的此演示或 tio.run 上的Python 演示
順便提一下,在Building
周圍使用單詞邊界\b
來匹配整個單詞。
re.findall(r"(?<![a-zA-Z:])[-+]?\d*\.?\d+", x)
這將找到給定字符串中的所有數字。
如果你只想要第一個數字,你可以簡單地通過索引來訪問它:
re.findall(r"(?<![a-zA-Z:])[-+]?\d*\.?\d+", x)[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.