我(新手(正在努力使用 regex.findall(( 将数据库分成列。
我想将这些荷兰街道名称分为名称和编号。
Roemer Visscherstraat 15
Vondelstraat 102-huis
对于我使用的号码
S*$
这工作得很好。对于我使用的街道名称
^S.+[^S$]
或者:使用除最后一个元素之外的所有元素,该元素可能是数字或数字和其他内容的组合。
问题是:Python 也会在姓氏后面保留最后一个空格,所以我得到:
"罗默·维舍尔大街">
有什么方法可以阻止这种情况发生吗?
此外,Findall 返回一个列表,其中包含我想要的数据库位和一个空字符串。这是怎么发生的,我可以以某种方式防止它吗?
提前非常感谢您的帮助。
您可以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
对于数字,您应该使用以下数字:
S+$
使用+
而不是*
将确保您在匹配中至少有一个角色。
对于街道名称,您可以使用以下内容:
^.+(?=sS+$)
这样做的作用是选择文本直到数字。
但是,您可以考虑做的是改用一个正则表达式匹配与捕获组。以下方法将起作用:
^(.+(?=sS+$))s(S+$)
在这种情况下,第一个捕获组为您提供街道名称,第二个捕获组为您提供编号。
([^d]*)s+(d.*)
在这个正则表达式中,第一组捕获空格和数字之前的所有内容,第二组给出所需的数字,我的假设是数字将以数字开头,并且名称中
没有数字
罗默维舍大街 15
号
Full match 0-24 `Roemer Visscherstraat 15`
Group 1. 0-21 `Roemer Visscherstraat`
Group 2. 22-24 `15`
冯德尔大街 102-huis
Full match 24-46 `Vondelstraat 102-huis`
Group 1. 24-37 `Vondelstraat`
Group 2. 38-46 `102-huis`