python-3.x 尝试将字符串与正则表达式模式进行比较

kknvjkwl  于 2022-12-30  发布在  Python
关注(0)|答案(3)|浏览(132)

我如何将一个正则表达式模式与一个字符串进行比较?
示例:“街道A 2 B”
对于这种情况,我用途:

re.split("([0-9]+)", address)

但是,对于另一个案例“Street 23”,我使用

re.split("([0-9]+)", address)

我需要像这两个案例一样构建它,使它们能够相互对话。如果我输入“Street A 2 b”,我需要输出['Street A','2 b']如果我输入“Street 23”,我需要输出['Street','23']
我试着去做:

address = str(input('Enter the address: '))

if address != re.search(r"([0-9]+ [a-z]+)", address):
    my_list = re.split("([0-9]+)", address)
    print(my_list)
else:
    my_list = re.split("([0-9]+ [a-z]+)", address)
    print(my_list)

但它不起作用
我需要该程序识别每一个两种情况下,并正确输出.

pgvzfuti

pgvzfuti1#

在模式中使用lookahead可以得到你想要的结果,这将使用一个空格后面跟一个数字作为分隔符。

def split_address(address):
    return re.split(r'\s+(?=\d)', address)

print(split_address('Street A 2 b'))
print(split_address('Street 23'))
5vf7fwbs

5vf7fwbs2#

你可以在第一个空格+数字上分割,但是只能用maxsplit=1分割一次。但是这会给你留下3个元素列表,所以你必须把结尾连接起来。不确定是否有可能不使用连接。E:从Barmar的答案中窃取了前瞻模式。

import re

address = input('Enter the address: ')

my_list = re.split(" (?=[0-9])", address, maxsplit=1)
print(my_list)

仅供参考:input应该已经返回str,因此不需要转换它。

ohtdti5x

ohtdti5x3#

您可以使用regex功能:

import re

match = re.match(r"(\D+)(.*)", "Street A 2 b")

print("'%s', '%s'" % (match[1].strip(), match[2].strip()))

输出

“甲街”、“二乙街”

注解

模式\D+搜索所有连续的非数字字符。匹配模式使用分组(使用括号)。因此,第一部分(street)存储在match[1]中,其余部分(number ...)存储在match[2]中。
要删除不需要的空格,请使用strip()

相关问题