Python Regex:如何在最后一个字符串之前不选择空格?

时间:2017-08-05 13:07:46

标签: python regex text

我(一个新手)正在努力将列中的数据库与regex.findall()分开。

我想将这些荷兰街道名称分成名称和编号。

Roemer Visscherstraat 15
Vondelstraat 102-huis

对于我使用的号码

 \S*$

哪种方法效果很好。对于我使用的街道名称

^\S.+[^\S$]

或者:使用除最后一个元素之外的所有元素,可以是数字或数字与其他元素的组合。

问题是:Python然后还保留姓氏后面的最后一个空格,所以我得到:

'Roemer Visscherstraat'

我能以任何方式阻止这种情况发生吗?

此外,Findall返回一个列表,其中包含我想要的数据库位和一个空字符串。这是怎么发生的,我能以某种方式阻止它吗?

非常感谢您的帮助。

3 个答案:

答案 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+$)

在这种情况下,第一个捕获组为您提供街道名称,第二个捕获组为您提供数字。