python的新手,能胜任几种语言,但看不出做“以下”的“时髦”方式。我敢肯定它正在为一个正则表达式而尖叫,但我能想到的任何解决方案(使用正则表达式组和其他方法)都会很快变得疯狂。
所以,我有一个类似html标签的字符串,我想用实际的html标签替换。
例如:
Hello, my name is /bJane/b.
应该成为:
Hello, my name is <b>Jane</b>.
它可能与[i] talic和[u] nderline组合:
/iHello/i, my /uname/u is /b/i/uJane/b/i/u.
应该成为:
<i>Hello</i>, my <u>name</u> is <b><i><u>Jane</b></i></u>.
显然直接的str.replace不起作用,因为每个第二个令牌都需要以前进的速度进行。
为清楚起见,如果令牌被组合,它总是首先打开,首先关闭。
非常感谢!
PS:在任何人兴奋之前,我知道这种事情应该用CSS,blah,blah,blah来完成,但我没有写软件,我只是在逆转它的输出!答案 0 :(得分:7)
也许这样的事情会有所帮助:
import re
def text2html(text):
""" Convert a text in a certain format to html.
Examples:
>>> text2html('Hello, my name is /bJane/b')
'Hello, my name is <b>Jane</b>'
>>> text2html('/iHello/i, my /uname/u is /b/i/uJane/u/i/b')
'<i>Hello</i>, my <u>name</u> is <b><i><u>Jane</u></i></b>'
"""
elem = []
def to_tag(match_obj):
match = match_obj.group(0)
if match in elem:
elem.pop(elem.index(match))
return "</{0}>".format(match[1])
else:
elem.append(match)
return "<{0}>".format(match[1])
return re.sub(r'/.', to_tag, text)
if __name__ == "__main__":
import doctest
doctest.testmod()
答案 1 :(得分:0)
s/\/([biu])([^/]\+)\/\1/<\1>\2<\/\1>/g
答案 2 :(得分:0)
一个非常简单的解决方案是使用源标记'/ b'拆分字符串,并使用新目标标记''重新加入子字符串数组,如下所示:
s = "Hello, my name is /bJane/b."
'<b>'.join(s.split('/b'))
print s
'Hello, my name is <b>Jane<b>.'