我正在尝试用Python中的另一个字符串递归替换字符串。我知道this线程,但来自其他语言我很惊讶 - 它真的那么难吗?有没有办法使用单线程来做到这一点?
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)
我认为r
意味着递归,但它似乎没有在这里做到。简单的替换真的很难吗?
我已经尝试了string.replace
- 这不起作用,我认为它可能是换行符吗?然后我尝试了string.translate
,它在替换字符串中需要相同数量的字符,这对于此示例并不适用,并且代码行太多。我尝试了很多这个版本,我做错了什么?
也许我误解了递归?我认为这意味着“不是一场比赛,一直到最后”?我想替换* with the </a>
。 astring
部分只是一个例子而不是我试图替换的实际字符串,因为它很大。 (也请原谅我的新闻)
请将这个问题投给罢免
答案 0 :(得分:2)
有几点需要注意:
该字符串不是有效的python语法。它由单个双引号定义,但其中有双引号。使用单引号str = 'blah blah'
定义字符串或使用三引号str = """blah blah"""
str
是built-in function的名称。最好不要覆盖内置插件(尽管允许)。
r""
定义了“原始字符串”。请参阅docs。
re.sub()
会替换字符串中所有非重叠的匹配序列,这就是您想要的。在简单的情况下,应首选string.replace()
,例如mystring.replace('*', '</a>')
。请参阅docs。
鉴于这些要点,这段代码:
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)
将产生以下输出:
<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>
请注意,替换字符串</a>
中的正斜杠需要转义而不是。但是,模式'*'
需要进行转义才能使其成为有效的正则表达式。
答案 1 :(得分:1)
考虑到评论中的建议,这是一个可能的解决方案:
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
答案 2 :(得分:1)
在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>')