首页 > 解决方案 > Python 正则表达式 - 替换基于字符串的重复模式

问题描述

我想将字符串转换L^2 M T^-1L^2.M.T^-1. 仅当它位于两个单词字符之间时,点才会替换空格 (\s)。例如,如果字符串是 'lbf / s',则不会应用替换。

str1= 'L^2 M T^-1'

pattern = re.compile(r'(\w+\s\w+)+')
def pattern_match2(m):
    me = m.group(0).replace(' ', '.')
    return me

pattern.sub(pattern_match2, str1) # this produces L2.MT-1

如何通过重复模式用点(。)替换字符串?

标签: pythonregexpattern-matching

解决方案


您可以re.sub直接使用,而不是找到匹配项然后使用str.replace. 另外,我会使用,\b而不是\w因为\w匹配任何[a-zA-Z0-9_],同时\b以更智能的方式封装它(本质上它相当于(^\w|\w$|\W\w|\w\W)

import re

print(re.sub(r'\b(\s)\b', '.', 'L^2 M T^-1'))
# L^2.M.T^-1

print(re.sub(r'\b(\s)\b', '.', 'lbf / s'))
# lbf / s

推荐阅读