加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:01:36 所属栏目:百科 来源:网络整理
导读:我试图在这些字符串中分离[0-9]和[A-Z]: 100M20M1D80M20M1I79M20M10000N80M 我尝试使用Python re模块,以下是我使用的代码: import renum_alpha = re.compile('(([0-9]+)([A-Z]))+')str1="100M"n_a_match = num_alpha.match(str1)n_a_match.group(2),n_a_ma
我试图在这些字符串中分离[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']

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读