我(一个新手)正在努力将列中的数据库与regex.findall()分开。
我想将这些荷兰街道名称分成名称和编号。
Roemer Visscherstraat 15
Vondelstraat 102-huis
对于我使用的号码
\S*$
哪种方法效果很好。对于我使用的街道名称
^\S.+[^\S$]
或者:使用除最后一个元素之外的所有元素,可以是数字或数字与其他元素的组合。
问题是:Python然后还保留姓氏后面的最后一个空格,所以我得到:
'Roemer Visscherstraat'
我能以任何方式阻止这种情况发生吗?
此外,Findall返回一个列表,其中包含我想要的数据库位和一个空字符串。这是怎么发生的,我能以某种方式阻止它吗?
非常感谢您的帮助。
答案 0 :(得分:0)
您可以rstrip()
名称删除其末尾的所有空格:
>>>'Roemer Visscherstraat '.rstrip()
'Roemer Visscherstraat'
但如果输入类似于您发布的输入,则可以使用split()
代替正则表达式,例如:
st = 'Roemer Visscherstraat 15'
data = st.split()
num = st[-1]
name = ' '.join(st[:-1])
print 'Name: {}, Number: {}'.format(name, num)
输出:
Name: Roemer Visscherstraat, Number: 15
答案 1 :(得分:0)
([^\d]*)\s+(\d.*)
在这个正则表达式中,第一组捕获空格和数字之前的所有内容,第二组获得所需的数字
我的假设是,数字将以数字开头,名称中不会有数字
看看https://regex101.com/r/eW0UP2/1
Roemer Visscherstraat 15
Full match 0-24 `Roemer Visscherstraat 15`
Group 1. 0-21 `Roemer Visscherstraat`
Group 2. 22-24 `15`
Vondelstraat 102-huis
Full match 24-46 `Vondelstraat 102-huis`
Group 1. 24-37 `Vondelstraat`
Group 2. 38-46 `102-huis`
答案 2 :(得分:0)
对于该号码,您应该使用以下内容:
\S+$
使用+
代替*
将确保您在匹配中至少有一个字符。
对于街道名称,您可以使用以下内容:
^.+(?=\s\S+$)
这样做会选择文本直到数字。
然而,您可能会考虑使用一个与捕获组匹配的正则表达式匹配。以下方法可行:
^(.+(?=\s\S+$))\s(\S+$)
在这种情况下,第一个捕获组为您提供街道名称,第二个捕获组为您提供数字。