2

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

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

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

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

额外的功劳:有没有办法我可以得到这个结果?['ape4', 'banana3']?

4

2 回答 2

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]用更具体或更不具体的模式替换,此正则表达式仅基于您在此处发布的字符串。

于 2013-10-12T00:40:30.390 回答
0

这是因为 3 正在劈香蕉,最后是空串。

至于第二个结果,你可以在 \s 上拆分吗?

编辑哦,我明白了,空间并不总是在那里。

你可以像这样匹配:

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

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

于 2013-10-12T00:38:23.253 回答