如何替换字符串中的成对标记?

2024-10-03 06:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

python新手,精通几种语言,但看不到一种“时髦”的方式来完成以下工作。我敢肯定这是对一个正则表达式的尖叫,但任何我能想出的解决方案(使用正则表达式组或不使用)都会很快变得疯狂。在

所以,我有一个带有类似html标记的字符串,我想用实际的html标记替换它。在

例如:

Hello, my name is /bJane/b.

应该变成:

^{pr2}$

它也可以与泰利克和安德林结合在一起:

/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>.

很明显是直人结构更换不起作用,因为每第二个令牌都需要前向斜杠。在

为了清楚起见,如果令牌被组合,它总是先打开,先关闭。在

非常感谢!在

PS:在任何人兴奋之前,我知道这类事情应该用CSS,blah,blah,blah来完成,但我没有编写软件,我只是颠倒了它的输出!在


Tags: 字符串name标记语言helloismyhtml
3条回答

使用sed:

s/\/([biu])([^/]\+)\/\1/<\1>\2<\/\1>/g

也许这样的方法可以帮助:

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()

一个非常简单的解决方案是使用源标记'/b'拆分字符串,然后用新的目标标记“”重新联接子字符串数组,如下所示:

s = "Hello, my name is /bJane/b."
'<b>'.join(s.split('/b'))
print s

'Hello, my name is <b>Jane<b>.'

相关问题 更多 >