gpt4 book ai didi

python搜索/用类似sed的表达式替换正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 09:55:19 24 4
gpt4 key购买 nike

我想在 Python 中实现类似 sed 的搜索和替换。

很明显,Python 有 re 模块:

import re
re.sub("([A-Z]+)", r"\1-\1", "123 ABC 456")

但是,我想在单个字符串中指定搜索/替换操作,就像在 sed 中一样(暂时不考虑任何转义问题):

s/([A-Z]+)/\1-\1/g

我更喜欢这种语法的原因是因为实际的搜索和替换规范是由用户提供的,我认为用户指定一个搜索/替换字符串比同时指定一个模式 和一个模板

更新

对sed 的s(搜索/替换)命令感兴趣,用于单行(无特殊扩展)。用例实际上是允许用户为主机名提供字符串转换(带组)。

有什么想法吗?

最佳答案

我的第一个想法是将它拆分为 / 并将其作为参数传递给 re.sub

原来这相当复杂,而且我很确定它不是防弹的,所以我给你这个作为起点。

问题是,如果我们想处理斜杠,比如用反斜杠替换斜杠,该怎么办。然后 sed 表达式将是

's/\\/\//g'

我必须用前面没有反斜杠的斜杠来分割它

_, pattern, repl, options = re.split(r'(?<!\\)/', sed)

为了让它更复杂,可以在哈希前面加上两个反斜杠,所以:

_, pattern, repl, options = re.split(r'(?<![^\\]\\)/', sed)

re.sub 看起来像

re.sub(pattern, repl, s, count='g' not in options)

ups,不,在 Python 中,斜杠不必转义,所以:

re.sub(pattern, re.sub(r'\\/', '/', repl), s, count='g' not in options)

>>> import re
>>> s = r'\some\windows\path'
>>> sed = r's/\\/\//g'
>>> _, pattern, repl, options = re.split(r'(?<![^\\]\\)/', sed)
>>> re.sub(pattern, re.sub(r'\\/', '/', repl), s, count='g' not in options)
'/some/windows/path'

关于python搜索/用类似sed的表达式替换正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46099856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com