Python正则表达式多行替换

Python正则表达式多行替换,python,regex,python-2.7,Python,Regex,Python 2.7,我搜索了现有的问题,但它们似乎没有回答这个特定的问题 我有以下python程序 description = """\ before {cs:id=841398|rep=myrepo}: after """ pattern = re.compile(r"(.*)\{cs:id=(.*)\|rep=(.*)\}(.*)") 我需要替换描述中的正则表达式,如下所示,但我无法正确地获得模式和替换语法 description="""\ before <a href="http://crucib

我搜索了现有的问题,但它们似乎没有回答这个特定的问题

我有以下python程序

description = """\
before

{cs:id=841398|rep=myrepo}: after
"""
pattern = re.compile(r"(.*)\{cs:id=(.*)\|rep=(.*)\}(.*)")
我需要替换描述中的正则表达式,如下所示,但我无法正确地获得模式和替换语法

description="""\
before

<a href="http://crucible.app.com:9090/myrepo?cs=841398">841398</a> : after
"""
crucible.app.com:9090是一个常数,我之前已经有了,所以我基本上需要用我的替代品来替换这个图案


有人能告诉我什么是最好的python正则表达式查找和替换语法吗?

在您的模式中不需要第一个和最后一个。*。要在替换字符串中写回捕获的组,请使用\1和\2:

您还可以使用命名组:

pattern = re.compile(r"\{cs:id=(?P<id>[^|]*)\|rep=(?P<rep>[^}]*)\}")
然后在替换字符串中:

"<a href=\"http://crucible.app.com:9090/\g<repo>?cs=\g<id>\">\g<id></a>"

在您的模式中不需要第一个和最后一个。*。要在替换字符串中写回捕获的组,请使用\1和\2:

您还可以使用命名组:

pattern = re.compile(r"\{cs:id=(?P<id>[^|]*)\|rep=(?P<rep>[^}]*)\}")
然后在替换字符串中:

"<a href=\"http://crucible.app.com:9090/\g<repo>?cs=\g<id>\">\g<id></a>"
使用/:

\1、\2参考匹配的组1、2

我稍微修改了正则表达式

不需要逃避{,}。 在{..}之前、之后删除了捕获组。 已使用非贪婪匹配:*? 使用/:

\1、\2参考匹配的组1、2

我稍微修改了正则表达式

不需要逃避{,}。 在{..}之前、之后删除了捕获组。 已使用非贪婪匹配:*? 你调查过了吗?你调查过了吗?
>>> pattern = re.compile(r"{cs:id=(.*?)\|rep=(.*?)}")
>>> description =  pattern.sub(r'<a href="http://crucible.app.com:9090/\1?cs=\2">\1</a>', description)
>>> print(description)
before

<a href="http://crucible.app.com:9090/841398?cs=myrepo">841398</a>: after