我正在开发一个项目,我想将nwodkram文件转换为HTML文件。在nwodkram中,URL在表单上给出
[www.stackoverflow.com](This is StackOverflow)
HTML中的对应
<a href='www.stackoveflow.com'>This is StackOverflow<\a>.
我可以这样做:
def parser_nwodkram(text):
string = list(text)
counter = 0 # Count number of characters in string
for char in string:
if char == '[':
sq_par_0 = counter # Location of square parenthesis 0
if char == ']':
if 'sq_par_0' in locals():
url = "".join(string[sq_par_0+1:counter])
if char == '(':
if 'url' in locals():
par_0 = counter
if char == ')':
if 'par_0' in locals():
url_ref = r"<a href='{}'>{}<\a>".format(\
"".join(string[par_0+1:counter]), url)
string[counter] = url_ref
del string[sq_par_0:counter]
counter += 1
return "".join(string)
但是我想更优雅高效,有没有办法在字符串中搜索某个结构,在这种情况下
[...](...)?
答案 0 :(得分:2)
您可以使用正则表达式实现此功能。您可以在re.search
中为此创建重新组,并获取这两个元素。例如:
>>> a = '[www.stackoverflow.com](This is StackOverflow)'
>>> import re
>>> match = re.search('(\[.*?\])(\(.*?\))',a)
>>> match.group()
'[www.stackoverflow.com](This is StackOverflow)'
>>> match.group(1)
'[www.stackoverflow.com]'
>>> match.group(2)
'(This is StackOverflow)'
>>>
对于你的问题,它就像是:
import re
def parser_nwodkram(text):
match = re.search('\[(.*?)\]\((.*?)\)',text)
url_ref = "<a href='%s'>%s</a>" % (match.group(1), match.group(2))
print url_ref
parser_nwodkram('[www.stackoverflow.com](This is StackOverflow)')
输出:
<a href='www.stackoverflow.com'>This is StackOverflow</a>
此外,您可以为正则表达式(此处为AttributeError)实现正确的异常处理,以处理未正确给出文本的情况
答案 1 :(得分:0)
您始终可以使用来自here
的python的内置regexp