如何用Python正则表达式拆分如'S10'的无空格字母数字组合?
用Python正则拆分字母数字混合字符串
刚好我之前也碰到过类似的需求,要把像'S10'、'S11'这种无空格的字母数字混合串拆成字母和数字分开的列表,比如把'S10'拆成['S','10'],用Python正则就能轻松搞定,给你两种实用的实现方式:
方法一:使用re.findall()(直观易理解)
这种方式直接匹配出字母部分和数字部分,代码如下:
import re input_str = 'S10' # 正则匹配:第一个分组匹配一个或多个字母,第二个分组匹配一个或多个数字 pattern = r'([A-Za-z]+)(\d+)' # findall返回匹配到的分组元组,取第一个结果转成列表 result = list(re.findall(pattern, input_str)[0]) print(result) # 输出: ['S', '10']
方法二:使用re.split()(通过位置拆分)
如果想用split来实现,可以借助零宽断言定位拆分位置,避免产生空字符串:
import re input_str = 'S10' # 匹配字母后面、数字前面的位置(零宽断言,不会消耗字符) pattern = r'(?<=[A-Za-z])(?=\d)' result = re.split(pattern, input_str) print(result) # 输出: ['S', '10']
简单解释下:
- 方法一的正则通过两个捕获组分别抓取字母和数字,
findall会返回符合条件的分组组合,转成列表就是你要的结果,适合确定字符串是「字母+数字」固定格式的场景。 - 方法二用了正向后顾和前瞻断言,精准定位到字母和数字的分界处进行拆分,同样能得到干净的拆分结果。
内容的提问来源于stack exchange,提问作者garrydavid
相关产品推荐
相关产品推荐

