Python 正则表达式:如何在最后一个字符串之前不选择空格?



我(新手(正在努力使用 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.*) 

在这个正则表达式中,第一组捕获空格和数字之前的所有内容,第二组给出所需的数字,我的假设是数字将以数字开头,并且名称中
没有数字

,看看 https://regex101.com/r/eW0UP2/1

罗默维舍大街 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`

最新更新