python中的简单递归字符串替换?

python中的简单递归字符串替换?,python,regex,string,Python,Regex,String,我试图用Python中的另一个字符串递归地替换一个字符串。我知道线程,但来自其他语言我很惊讶-真的那么难吗?有没有办法使用一个班轮做到这一点 astring="<li><a href="#Quick Start">Quick Start*</li></li> <li><a href="#Parsing a Document">Parsing a Document*</li></li> <ul&g

我试图用Python中的另一个字符串递归地替换一个字符串。我知道线程,但来自其他语言我很惊讶-真的那么难吗?有没有办法使用一个班轮做到这一点

astring="<li><a href="#Quick Start">Quick Start*</li></li>
<li><a href="#Parsing a Document">Parsing a Document*</li></li>
<ul>
<li><a href="#Parsing HTML">Parsing HTML*</li></li>
<li><a href="#Parsing XML">Parsing XML*</li></li>"

tweaked = re.sub(r"\*",r"</a>", astring)
astring=“
  • ”,astring)
  • 我以为
    r
    意味着递归,但在这里它似乎不这样做。简单的替换真的这么难吗

    我尝试了
    string.replace
    -但没有成功,我想可能是换行了吧?然后我尝试了
    string.translate
    ,它需要替换字符串中相同数量的字符,但在本例中不起作用,而且代码行太多。我试过很多版本,我做错了什么

    也许我误解了?我以为这意味着“没有一场比赛,坚持到底”之类的东西?我想用替换
    *。
    astring
    部分只是一个示例,而不是我试图替换的实际字符串,因为它太大了。(请原谅我的生疏)


    请把这个问题投到遗忘的一票

    考虑到评论中的建议,这里有一个可能的解决方案:

    string = """<li><a href="#Quick Start">Quick Start*</li></li>
    <li><a href="#Parsing a Document">Parsing a Document*</li></li>
    <ul>
    <li><a href="#Parsing HTML">Parsing HTML*</li></li>
    <li><a href="#Parsing XML">Parsing XML*</li></li>"""
    
    string = string.replace("*", "</a>")
    print string
    
    string=“”
  • ”) 打印字符串
  • 考虑到评论中的建议,这里有一个可能的解决方案:

    string = """<li><a href="#Quick Start">Quick Start*</li></li>
    <li><a href="#Parsing a Document">Parsing a Document*</li></li>
    <ul>
    <li><a href="#Parsing HTML">Parsing HTML*</li></li>
    <li><a href="#Parsing XML">Parsing XML*</li></li>"""
    
    string = string.replace("*", "</a>")
    print string
    
    string=“”
  • ”) 打印字符串
  • 在Python中
    r''
    r''
    表示原始字符串。在原始字符串中,不会执行反斜杠解释

    以下几点似乎效果不错:

    foo="""<li><a href="#Quick Start">Quick Start*</li></li>
    <li><a href="#Parsing a Document">Parsing a Document*</li></li>
    <ul>
    <li><a href="#Parsing HTML">Parsing HTML*</li></li>
    <li><a href="#Parsing XML">Parsing XML*</li></li>"""
    
    foo = foo.replace('*', '</a>')
    
    foo=”“”
  • 在Python中
    r''
    r''
    表示原始字符串。在原始字符串中,不进行反斜杠解释

    以下几点似乎效果不错:

    foo="""<li><a href="#Quick Start">Quick Start*</li></li>
    <li><a href="#Parsing a Document">Parsing a Document*</li></li>
    <ul>
    <li><a href="#Parsing HTML">Parsing HTML*</li></li>
    <li><a href="#Parsing XML">Parsing XML*</li></li>"""
    
    foo = foo.replace('*', '</a>')
    
    foo=”“”

  • 有几件事需要注意:

  • 该字符串不是有效的python语法。它是用单双引号定义的,但是里面有双引号。使用单引号定义字符串
    str='blah blah'
    或使用三个引号
    str=“”blah blah”“”

  • str
    是一个。最好不要覆盖内置项(尽管这是允许的)

  • r”“
    定义“原始字符串”。看

  • re.sub()
    会替换字符串中所有不重叠的匹配序列,这正是您想要的。在简单的情况下,应首选
    string.replace()
    ,例如
    mystring.replace('*','')
    。看

  • 鉴于上述几点,该代码:

    import re
    
    mystring = '''<li><a href="#Quick Start">Quick Start*</li></li>
    <li><a href="#Parsing a Document">Parsing a Document*</li></li>
    <ul>
    <li><a href="#Parsing HTML">Parsing HTML*</li></li>
    <li><a href="#Parsing XML">Parsing XML*</li></li>'''
    
    mynewstring = re.sub(r'\*', '</a>', mystring)
    print(mynewstring)
    
    重新导入
    mystring=''
  • ',mystring) 打印(mynewstring)
  • 将产生以下输出:

    <li><a href="#Quick Start">Quick Start</a></li></li>
    <li><a href="#Parsing a Document">Parsing a Document</a></li></li>
    <ul>
    <li><a href="#Parsing HTML">Parsing HTML</a></li></li>
    <li><a href="#Parsing XML">Parsing XML</a></li></li>
    

    请注意,替换字符串
    中的正斜杠不需要转义。但是,模式
    “*”
    确实需要转义以使其成为有效的正则表达式。

    有几点需要注意:

  • 该字符串不是有效的python语法。它是用单双引号定义的,但是里面有双引号。使用单引号定义字符串
    str='blah blah'
    或使用三个引号
    str=“”blah blah”“”

  • str
    是一个。最好不要覆盖内置项(尽管这是允许的)

  • r”“
    定义“原始字符串”。看

  • re.sub()
    会替换字符串中所有不重叠的匹配序列,这正是您想要的。在简单的情况下,应首选
    string.replace()
    ,例如
    mystring.replace('*','')
    。看

  • 鉴于上述几点,该代码:

    import re
    
    mystring = '''<li><a href="#Quick Start">Quick Start*</li></li>
    <li><a href="#Parsing a Document">Parsing a Document*</li></li>
    <ul>
    <li><a href="#Parsing HTML">Parsing HTML*</li></li>
    <li><a href="#Parsing XML">Parsing XML*</li></li>'''
    
    mynewstring = re.sub(r'\*', '</a>', mystring)
    print(mynewstring)
    
    重新导入
    mystring=''
  • ',mystring) 打印(mynewstring)
  • 将产生以下输出:

    <li><a href="#Quick Start">Quick Start</a></li></li>
    <li><a href="#Parsing a Document">Parsing a Document</a></li></li>
    <ul>
    <li><a href="#Parsing HTML">Parsing HTML</a></li></li>
    <li><a href="#Parsing XML">Parsing XML</a></li></li>
    

    请注意,替换字符串
    中的正斜杠不需要转义。但是,模式
    “*”
    确实需要转义以使其成为有效的正则表达式。

    是否要将所有星号符号替换为“”?我不知道它的哪一部分是“递归的”。这里“递归”这个词似乎没有任何意义。请您澄清一下您的问题好吗?顺便说一句,在Python中使用
    str
    作为变量的名称不是一个好主意,因为它也是内置函数的名称。另一个问题是,
    str
    在代码中的定义是否与上面的代码片段完全相同。如果是,则需要注意跨多行生成字符串文字,并转义其中的双引号。要同时解决这两个问题,只需使用“”(三重引号,有关详细信息,请参阅)。该字符串无效,因为它包含未替换的引号。请首先替换所有“inside by”“好的,是的,但是假设字符串在转义后包含它,这只是一个示例。我没想到,对不起!编辑以上,以澄清我自己。。。问题不在于字符串,而在于regex命令…谢谢各位。是否要将所有星号符号替换为“”?我不知道它的哪一部分是“递归的”。这里“递归”这个词似乎没有任何意义。请您澄清一下您的问题好吗?顺便说一句,在Python中使用
    str
    作为变量的名称不是一个好主意,因为它也是内置函数的名称。另一个问题是,
    str
    在代码中的定义是否与上面的代码片段完全相同。如果是,则需要注意跨多行生成字符串文字,并转义其中的双引号。要同时解决这两个问题,只需使用“”(三重引号,有关详细信息,请参阅)。该字符串无效,因为它包含未替换的引号。请首先替换所有“inside by”“好的,是的,但是假设字符串在转义后包含它,这只是一个示例。我没想到,对不起!编辑以上,以澄清我自己。。。问题不在于绳子,而在于绳子