簡體   English   中英

Python正則表達式獲取特定字符串后的第一個元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM