0

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

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', '']
4

2 回答 2

1

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

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

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

于 2013-06-04T14:55:55.750 回答
0

您将要使用:\d+|\D+作为您的正则表达式进行拆分。

--请注意,您需要 excape 序列来\在您的字符串中创建,因此输入的实际文本将是:"\\d+|\\D+"

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

于 2013-06-04T14:47:43.610 回答