正则表达式 – 如何使用正则表达式分隔字符串中的数字和字符,如“30M1000N20M”

前端之家收集整理的这篇文章主要介绍了正则表达式 – 如何使用正则表达式分隔字符串中的数字和字符,如“30M1000N20M”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在这些字符串中分离[0-9]和[A-Z]:

100M
20M1D80M
20M1I79M
20M10000N80M

我尝试使用Python re模块,以下是我使用的代码

>>>import re
>>>num_alpha = re.compile('(([0-9]+)([A-Z]))+')
>>>str1="100M"
>>>n_a_match = num_alpha.match(str1)
>>>n_a_match.group(2),n_a_match.group(3)

100,M   #just what I want

>>>str1="20M10000N80M"
>>>n_a_match = num_alpha.match(str1)
>>>n_a_match.groups()

('80M','80','M')  #only the last one,how can I get the first two?
#expected result ('20M','20','M','10000N','10000','N','80M','M')

此正则表达式适用于仅包含一个匹配但不包含多个匹配组的字符串.如何使用正则表达式处理它?

解决方法

我建议使用re.findall.如果您打算迭代结果,而不是构建列表,则可以使用re.finditer.这是一个如何工作的例子:

>>> re.findall("(([0-9]+)([A-Z]))","20M10000N80M")
[('20M','M'),('10000N','N'),('80M','M')]

如果您不想要组合数字字母字符串,则可以从匹配中删除外部括号,并获取单独的部分:

>>> re.findall("([0-9]+)([A-Z])","20M10000N80M")
[('20',('10000',('80','M')]

或者,如果您根本不需要元组(并且您不需要担心格式错误的输入,例如连续多个字母的字符串),您可以将模式更改为替换,并获取值一:

>>> re.findall("([0-9]+|[A-Z])","20M10000N80M")
['20','M']

猜你在找的正则表达式相关文章