Python *Calibre*正则表达式搜索并替换多个捕获短语的函数
这是我一直在做的事情 这就是我在查找部分使用的内容-([img[)(.*)(]]))Python *Calibre*正则表达式搜索并替换多个捕获短语的函数,python,regex,calibre,Python,Regex,Calibre,这是我一直在做的事情 这就是我在查找部分使用的内容-([img[)(.*)(]])) def replace(匹配、编号、文件名、元数据、字典、数据、函数、*args、**kwargs):返回match.group().replace('[img[,) 基本上是对一个单词(和周围的字符)进行分组,并在replace函数中对其进行修改。我的目标是能够在一行中使用多个字符串来实现这一点。这就是为什么我使用“replace”()的原因,因为我可以在一行中多次使用它 下面列出了一个i/o示例 [img
def replace(匹配、编号、文件名、元数据、字典、数据、函数、*args、**kwargs):返回match.group().replace('[img[,)
基本上是对一个单词(和周围的字符)进行分组,并在replace函数中对其进行修改。我的目标是能够在一行中使用多个字符串来实现这一点。这就是为什么我使用“replace”()的原因,因为我可以在一行中多次使用它
下面列出了一个i/o示例
[img[imagename.jpg]]
<img"imagename.jpg"/>
[img[imagename.jpg]]
如果您的示例中text1
和text3
消失只是一个疏忽,我认为您不需要多个捕获组,只需要一个文件名。括号和img
字符串是常量,因此您可以重新创建它们
您的模式应该类似于\[img\[([^]])\]\]\]
。您可以将其替换为
我说“差不多”这种模式是因为我不完全确定如何格式化它,以确保它在所有转义字符都完好无损的情况下进入正则表达式引擎。在Python中,您可能希望使用原始字符串,但我不知道如何使用Calibre应用正则表达式。同样,我不知道使用
\1
的反向引用是否有效(但我认为这是最有可能在未知的正则表达式环境中工作的形式).好吧,你的编辑告诉我,我不知道你在问什么。你两个例子中的修改与对方有什么关系?谢谢你的耐心。对混淆表示歉意。让我们从我发布的新代码开始。我正在努力使用替换函数,如果我能够在其中使用分组。好的,那么你不必这样做使用正则表达式替换,但只需正则表达式搜索,然后在match对象上使用Python表达式来获取替换(尽管您的示例存在语法错误和其他问题,所以我仍然不确定)。尝试匹配我在回答中建议的模式,并替换为“”.format(match.group())
。这确实取得了一些进展。下面是发生的情况。我肯定我把它搞砸了,但我修改了你的模式,因为它与文档中的任何内容都不匹配\[img\[(.*)\]\]
然后我使用了你的替换函数。输出结果是-
关闭…希望是这个
def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs): return match.group().replace('[img[(.*)]],<img"(.*)/>)
[img[imagename.jpg]]
<img"imagename.jpg"/>