Python正则提取字符串中数字及与数字紧邻的字母组合
解决方案
你之前写的正则r'[0-9]+'只会匹配连续的纯数字段,自然会把和数字绑定的字母部分筛掉。核心思路调整为:提取字符串里所有包含至少一个数字的连续非空白片段,自动过滤掉纯字母构成的词,再用空格拼接即可。
可直接运行的代码
import re s = ['64b DRIVE RD', 'DRIVE RD 64', 'Unit 1 Drive RD 64b', '484 South Drive 84b WA', '64Drive'] res = [" ".join(re.findall(r'\S*\d\S*', item)) for item in s] print(res)
执行后输出和预期完全一致:
['64b', '64', '1 64b', '484 84b', '64Drive']
正则逻辑解释
正则r'\S*\d\S*'的匹配逻辑刚好贴合需求:
\S*匹配0到多个非空白字符,覆盖数字前后和数字直接相连的字母部分,比如64b末尾的b、64Drive里数字后的Drive段\d要求匹配片段里必须存在至少一个数字,从根源上排除了DRIVE/RD/Unit这类纯字母单词- 匹配时会自动按空白切分片段,不会把不同词的字符混到一起,提取完成后用空格拼接就得到最终结果。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

