Python正则表达式,对字符串之间的一组字符求反

2024-04-29 22:27:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几组字符串,后面是数字,后面是单词,还有混乱的数字和单词等等。 比如说,

"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后面有一个数字,则需要将其作为公寓编号, 而不是街道。 如何对上面的示例字符串执行此操作


Tags: norestreetmatch数字街道patternfin
2条回答

首先尝试在结尾处有No 123的情况,使用积极的前瞻

如果找不到,试试没有这个的街道

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

您可以通过以下正则表达式模式找到街道名称,以从语句中删除[0-9]

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

相关问题 更多 >