REGEX - 在数字和字母之间剪切文本

时间:2013-06-04 14:40:13

标签: text python-3.x

是否可以使用正则表达式以获得以下功能?

text       = "123abcd56EFG"
listWanted = ["123", "abcd", "56", "EFG"]

这个想法是每次一个数字后跟一个字母或一个字母后跟一个数字时剪切文本。

解决方案归功于以下答案

import re

pattern = r'(\d+|\D+)'

text  = "123abcd56EFG"
print(re.split(pattern, text))

text  = "abcd56EFG"
print(re.split(pattern, text))

此代码将给出......

['', '123', '', 'abcd', '', '56', '', 'EFG', '']
['', 'abcd', '', '56', '', 'EFG', '']

2 个答案:

答案 0 :(得分:1)

在正则表达式中使用捕获组。

>>> import re
>>> text  = "123abcd56EFG"
>>> pattern = r'(\d+)'
>>> re.split(pattern, text)
['', '123', 'abcd', '56', 'EFG']

虽然这会在开头和/或结尾为您提供空字符串,但在开头和/或结尾处有数字组的行,这些很容易剪掉。

答案 1 :(得分:0)

您希望使用\d+|\D+作为正则表达式进行拆分。

- 请注意,您需要使用excape序列在字符串中生成\,因此输入的实际文字将为:"\\d+|\\D+"

除非如下面的评论中所述,否则您使用原始字符串,在这种情况下,它将是r"\d+|\D+"r'\d+|\D+'