正则表达式 – 如何使用正则表达式分隔字符串中的数字和字符,如
发布时间: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'] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |