替换一行中具有特定模式的所有字符串的问题 python

Problem to replace all strings in a line which have a specific pattern in python

首先让我说我是 python 的新手。

line = "lmn = abc(xyz)/123/.../abc(123)"

line = "abc(xyz) = dlf/hmn/abc(fdg)"

我正在尝试的模式替换示例是 abc(xxx) = $xxx 这些方面的内容。

我创建的正则表达式是 (abc\()(.*?)(\)) --> 这工作正常。 现在如何确保替换发生在一行中的所有位置,因为 (.*?) 在一行中的不同位置不同。

我发现我们有 re.findall(pattern, string, flags=0) 它将 return 一个元组,我可以用它来构造 table 并进行行替换。 有没有更好的方法到处替换模式?

tmp = re.sub('(abc\()(.*?)(\))', '$' **group(1) content**, line , count=???)

上面的问题是我无法在 re.sub 我调用

中使用对象

在 perl 中它是简单的一行正则表达式

 =~ s/(abc\()(.*?)(\))/(\$)/g

能否请您指点我可以用于此目的的模块或 python 中任何正则表达式模块的文档。顺便说一句..我正在使用 python 3.6

您可以在 sub 的替换模式中使用 \<capture group number> 来插入捕获组。

因此,如果我对你的问题的理解正确,这就是你要查找的内容:

import re

line1 = "lmn = abc(xyz)/123/.../abc(123)"
line2 = "abc(xyz) = dlf/hmn/abc(fdg)"

# I've simplified the pattern a little to only use two capture groups.
pattern = re.compile(r"(abc\((.*?)\))")

# This is the pattern to replace with: a dollar sign followed by the
# contents of capture group 2.
replacement_pattern = r"$"

print(pattern.sub(replacement_pattern, line1)) # lmn = $xyz/123/.../3
print(pattern.sub(replacement_pattern, line2)) # $xyz = dlf/hmn/$fdg