Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找并替换字符之间的字符串_Python_Python 3.x - Fatal编程技术网

Python 查找并替换字符之间的字符串

Python 查找并替换字符之间的字符串,python,python-3.x,Python,Python 3.x,我需要在文件中找到一个字符串并重新格式化 要查找格式的字符串: [title](link) 例如: [template application](https://stackoverflow.com/sample/base-app) <a href="https://stackoverflow.com/sample/base-app">template application</a> 我想将其更改为HTML链接: <a href="link">title

我需要在文件中找到一个字符串并重新格式化

要查找格式的字符串:

[title](link)
例如:

[template application](https://stackoverflow.com/sample/base-app)
<a href="https://stackoverflow.com/sample/base-app">template application</a> 
我想将其更改为HTML链接:

<a href="link">title</a> 

例如:

[template application](https://stackoverflow.com/sample/base-app)
<a href="https://stackoverflow.com/sample/base-app">template application</a> 

最好的方法是什么?
我在考虑正则表达式,但我不知道如何实现它。有一种简单的方法吗?

您可以利用函数接收另一个函数作为替换参数的事实:

import re

line = '[template application](https://stackoverflow.com/sample/base-app)'


def repl(match):
    return '<a href="{}">{}</a>'.format(match.group(2), match.group(1))


result = re.sub('\[(.+?)\]\((https?.+?)\)', repl, line)

print(result)

代替
repl
函数。

如Daniel所说,您可以使用
re
达到所需的结果,但如果您不想使用正则表达式,您可以使用
str.split

line = '[template application](https://stackoverflow.com/sample/base-app)'
link = line.split('(')[1][:-1]
title = line.split(']')[0][1:]

result = '<a href="{}">{}</a>'.format(link, title)
line='[模板应用程序](https://stackoverflow.com/sample/base-app)'
link=line.split(“(”)[1][:-1]
title=line.split(']')[0][1:]
结果=“”。格式(链接、标题)
如果您使用的是Python 3.6或更高版本:

result = f'<a href="{link}">{title}</a>'
result=f''

使用替换函数而不是字符串的任何特殊原因:
re.sub('\[(.+?)\]\((https?+?)\'),r'',line)