我試圖使用 python re 庫來分析一個包含街道名稱和多個(或只是一個)數字的字串,這些數字由正斜杠分隔。
example = 'Examplestreet 1/2.1/3a/10/10.1/11b/12a-12c/13a-c'
我想匹配所有數字,包括點之后的位置和相鄰的字母字符。如果連字符用一個字母字符連接兩個數字,它們也應該被視為一個匹配項。
預期輸出:
['1', '2.1', '3a', '10', '10.1', '11b', '12a-12c', '13a-c']
我正在嘗試以下
numbers = re.findall(r'\d \.*\d*\w[-\w]*', example)
除了單個非浮點數字(即'1')之外,它能夠找到所有:
print(numbers)
['2.1', '3a', '10', '10.1', '11b', '12a-12c', '13a-c']
我需要如何調整我的正則運算式以實作所需的輸出?
uj5u.com熱心網友回復:
該模式與單個 1 不匹配,因為\d \.*\d*\w[-\w]*預計至少 2 個字符至少 1 個數字\d 和 1 個單詞字符\w
如果地址不應該結束-并且只能匹配數字后面的字符 az,并且使用不區分大小寫的匹配:
\b\d (?:\.\d )?[a-z]*(?:-\w )*
\b一個詞的邊界\d (?:\.\d )?匹配帶有可選小數部分的數字[a-z]*匹配可選字符 az(?:-\w )*可選地重復匹配-和 1 個或多個單詞字符
正則運算式演示
請注意,匹配地址可能很困難,因為可能有許多不同的符號,此模式匹配示例字串中的給定格式。
import re
example = 'Examplestreet 1/2.1/3a/10/10.1/11b/12a-12c/13a-c'
pattern = r"\b\d (?:\.\d )?[a-z]*(?:-\w )*"
print(re.findall(pattern, example))
輸出
['1', '2.1', '3a', '10', '10.1', '11b', '12a-12c', '13a-c']
uj5u.com熱心網友回復:
這有效:
numbers = re.findall(r'\d[0-9a-z\-\.]*', example)
uj5u.com熱心網友回復:
使用正則運算式
作業示例:https ://regex101.com/r/PDYSgH/1
import re
example = 'Examplestreet 1/2.1/3a/10/10.1/11b/12a-12c/13a-c'
numbers = re.findall(r'\d[a-z0-9.\-]*', example)
使用拆分
可能您可以使用space然后拆分字串/。
numbers = example.split(" ")[-1].split("/")
uj5u.com熱心網友回復:
另一個似乎更簡單的解決方案:
>> re.findall(r'\d[^/]*', example)
['1', '2.1', '3a', '10', '10.1', '11b', '12a-12c', '13a-c']
您可以確認它在這里有效(盡管我不得不轉義斜杠 ( /) 字符)。
\d[^/]*: 匹配任何以數字開頭并后跟任何字符的字串,除了 a/(在所述字符處停止)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/425884.html
上一篇:附加后的空資料框
