簡體   English   中英

Python 正則表達式,否定字符串之間的一組字符

[英]Python regex, negate a set of characters in between a string

我有幾組字符串,數字后跟單詞和混亂的數字和單詞等。例如,

"Street 50 No 40", "5, saint bakers holy street", "32 Syndicate street"

我試圖將街道名稱與公寓號碼分開。

這是我當前的代碼:

import re 

pattern_street = re.compile(r'[A-Za-z]+\s?\w+\s?[A-Za-z]+\s?[A-Za-z]+',re.X)
pattern_apartmentnumber = re.compile(r'(^\d+\s? | [A-Za-z]+[\s?]+[0-9]+$)',re.X)

for i in ["Street 50 No 40", "5, saint bakers holy street", "32 Syndicate street"]:
    
    match_street = pattern_street.search(i) 
    match_apartmentnumber = pattern_apartmentnumber.search(i)

    fin_street = match_street[0]
    fin_apartmentnumber = match_apartmentnumber[0]

    print("street--",fin_street)
    print("apartmentnumber--",fin_apartmentnumber)

打印:

street-- Street 50 No
apartmentnumber-- No 40
street-- saint bakers holy street
apartmentnumber-- 5
street-- Syndicate street
apartmentnumber-- 32

我想從第一個街道名稱中刪除“否”。 即,如果有一條街道的末尾是No ,則需要將其作為公寓號,而不是街道。 我該如何為上面的示例字符串執行此操作?

先試試末尾有No 123的情況,用正向先行。

如果沒有找到,請嘗試沒有這個的街道。

pattern_street = re.compile(r'[A-Za-z]+[\s\w]+(?=\s[Nn]o\s\d+$)|[A-Za-z]+[\s\w]+',re.X)

您可以通過以下正則表達式模式找到街道名稱,以從語句中刪除No [0-9]

pattern_street = re.compile(r'[A-Za-z]+((?!No).)+',re.X)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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