python - Python 正则表达式 - 替换基于字符串的重复模式
问题描述
我想将字符串转换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
如何通过重复模式用点(。)替换字符串?
解决方案
您可以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
推荐阅读
- pandas - ValueError:地理编码时列的长度必须与键的长度相同
- laravel - 在用户登录页面后添加路由
- json - 尽管在邮递员中工作,但请求 JSON 在 JMeter 中给出错误
- r - R中的终结器修改对象 - 线程安全?
- flutter - 如何在没有BuildContext的简单类中获取上下文
- java - 如何将 RGB 图像转换为灰度但保留一种颜色?- 爪哇
- python - AttributeError:“DataFrame”对象没有属性“assign”
- firebase - 如何安排大约每整小时运行一次的firebase中的功能?
- python - ImportError:没有名为 pip._internal.cli.main 的模块
- sql - Switch(Select) 是否在 TRANSFORM 和 SELECT 之间工作?