如何编写Python正则表达式规则提取字符串中的13和46?
提取三位数字中的首尾数字(13和46)解决方案
嘿,这事儿不难!咱们先回顾下你原来的代码,然后一步步调整正则规则来实现需求。
首先,原代码是这样的:
>>> my_words = 'ABC 123 456 www' >>> my_words 'ABC 123 456 www' >>> import re >>> p = re.compile(r'\d{3}') >>> p.findall(my_words) ['123', '456']
要从每个三位数字组里提取首尾两位(也就是123取1+3=13,456取4+6=46),可以用捕获组来实现,具体代码如下:
>>> import re >>> my_words = 'ABC 123 456 www' >>> # 正则规则:捕获第一个数字,跳过中间的,再捕获第三个数字 >>> p = re.compile(r'(\d)\d(\d)') >>> # findall会返回捕获组的元组列表 >>> raw_matches = p.findall(my_words) >>> raw_matches [('1', '3'), ('4', '6')] >>> # 把每个元组里的字符拼接成完整字符串 >>> result = [''.join(match) for match in raw_matches] >>> result ['13', '46']
正则规则解释:
(\d):用括号包裹的第一个\d是捕获组,会匹配并保存三位数字里的第一个数字(比如123里的1)\d:无括号的\d仅匹配中间的数字(比如123里的2),但不会把它加入结果(\d):第二个捕获组,匹配并保存三位数字里的第三个数字(比如123里的3)
如果你想更简洁,也可以把拼接步骤和正则调用合并成一行:
>>> [''.join(m) for m in re.findall(r'(\d)\d(\d)', my_words)] ['13', '46']
内容的提问来源于stack exchange,提问作者3h1Nh7YX24
相关产品推荐
相关产品推荐

