使用正则表达式分割字符串时,为什么我会获得额外的空击?

时间:2013-10-12 00:33:39

标签: python python-2.7

我有一个这样的字符串:ape4banana3我将它拆分为:

>>>re.split('([1-5]?)|\s', "ape4banana3")
['ape', '4', 'banana', '3', '']

为什么我的结果中会跟踪''?我可以通过编写更智能的正则表达式来摆脱它吗?

旁注:正则表达式有交替,因为有时字符串看起来像这样:ape4 banana3然后我想丢失空格。

额外信用:有没有办法可以获得这个结果呢? ['ape4', 'banana3']

2 个答案:

答案 0 :(得分:4)

你看到了额外的空间,因为你正在拆分数字,所以你得到最后一位数后的空字符串。

至于你额外的功劳,这似乎是最简单的解决方案:

>>> re.findall(r"([a-zA-Z]+[1-5]+)", "ape4banana3")
['ape4', 'banana3']
>>> re.findall(r"([a-zA-Z]+[1-5]+)", "ape4 banana3")
['ape4', 'banana3']

根据您的使用情况,您可能需要使用更具体或更不具体的模式替换[a-zA-Z],此正则表达式仅基于您在此处发布的字符串。

答案 1 :(得分:0)

这是因为3分裂了香蕉,最后是空的串。

至于第二个结果,你可以分开\ s?

编辑哦,我知道,空间并不总是存在。

您可以匹配:

 ([A-Za-z].?[1-5])([A-Za-z].?[1-5])

括号用于将每个封闭的部分放入一个将作为其自己的数组单元格包含的组中。