如何用正则表达式为含iPhone的字符串在字母数字间加空格且保留后缀?
iPhone字符串数字分隔的修正方案
原代码存在两个问题:
- 正则会匹配所有数字并在其前后添加空格,导致数字后的字符(比如示例中的
s)被单独隔开; - 未限定仅处理包含
iPhone的字符串,会误处理其他带数字的字符串。
修正后的代码
import re # 测试用例 test_cases = ['iPhone8s', 'iPhone12Pro', 'random8', 'iPhoneXsMax'] for s in test_cases: # 仅匹配iPhone后紧跟的数字,在两者间插入空格 result = re.sub(r'(iPhone)(\d+)', r'\1 \2', s) print(f"{s} -> {result}")
输出结果
iPhone8s -> iPhone 8s iPhone12Pro -> iPhone 12Pro random8 -> random8 iPhoneXsMax -> iPhoneXsMax
正则说明
(iPhone):精准捕获iPhone这个固定前缀;(\d+):捕获iPhone之后的连续数字序列;- 替换为
\1 \2:将两个捕获组用空格连接,仅在iPhone和数字之间插入空格,数字后的字符保持原位置不变。
如果需要支持带小数的数字(比如iPhone13.5),可以把正则调整为(iPhone)(\d+(\.\d+)?),替换逻辑保持不变。
内容的提问来源于stack exchange,提问作者Aayush Gupta
相关产品推荐
相关产品推荐

