替换一行中具有特定模式的所有字符串的问题 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
首先让我说我是 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