Python正则表达式-替换基于字符串的重复模式

时间:2018-09-21 14:17:44

标签: python regex pattern-matching

我想将字符串L^2 M T^-1转换为L^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

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

1 个答案:

答案 0 :(得分:4)

您可以直接使用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