排除两个连续大写字母的正则表达式

2024-07-02 11:44:17 发布

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

我很难用正则表达式来解决这个表达式

e.g when given below: 
regex_exp(address, "OG 56432") 


它应该会回来

^{pr2}$


地址是一个字符串数组:

address = [
  "622 Gordon Lane St. Louisville OH 52071",
  "432 Main Long Road St. Louisville OH 43071",
  "686 Middle Street Pollocksville OG 56432"
]


我的解决方案目前如下(Python):

import re
def regex_exp(address, zipcode):
    for i in address:
        if zipcode in i:
            postal_code = (re.search("[A-Z]{2}\s[0-9]{5}", x)).group(0)
            # returns "OG 56432"

            digits = (re.search("\d+", x)).group(0)
            # returns "686"

            address = (re.search("\D+", x)).group(0)
            # returns "Middle Street Pollocksville OG"

            print(postal_code + ":" + address + "| " + digits)

regex_exp(address, "OG 56432")
# returns OG 56432: High Street Pollocksville OG | 686

从我的第二段可以看出,这不是正确的答案-我需要返回的值为

^{pr2}$

如何操作我的地址变量Regex搜索,以排除2个大写连续大写字母?我试过像

address = (re.search("?!\D+", x)).group(0)

删除基于A regular expression to exclude a word/string的两个连续的大写字母,但我认为这是一个错误的步骤。在

PS:我知道有更简单的方法来解决这个问题,但我想用正则表达式来改进我的基础知识


Tags: restreetmiddlesearchaddress地址groupregex
2条回答

如果您只想删除邮政编码(一个5位数字)的前两个连续的大写字母,那么使用这个

import re
text = "432 Main Long PC Market Road St. Louisville OG 43071"
address = re.sub(r'([A-Z]{2}[\s]{1})(?=[\d]{5})','',text)
print(address) 
# Output: 432 Main Long PC Market Road St. Louisville 43071

删除所有出现的两个连续大写字母:

^{pr2}$

与re.sub公司()和组捕获可以使用:

s="686 Middle Street Pollocksville OG 56432"
re.sub(r"(\d+)(.*)\s+([A-Z]+\s+\d+)",r"\3: \2 | \1",s)
Out: 'OG 56432:  Middle Street Pollocksville | 686'

相关问题 更多 >