我有字符串:
text = 'href = "www.google.com" onmouseover = blahblah >'
我想要'href = "www.google.com">'
目前,我的功能如下:
text = re.sub(r'href = \".*\".*>', 'href = \".*\">', text)
最终删除网站链接并将其替换为字符串'。*' 。我想我应该以某种方式使用?Pname?但是不知道如何正确地写它以便我得到正确的输出。
答案 0 :(得分:0)
您不想在.*
中替换,您希望在中替换第一个.*
匹配的。
为此,您需要反向引用,例如\1
。
这意味着你需要一些反向引用来引用一个捕获组,比如(.*)
而不是.*
。
更一般地说,替换字符串不是正则表达式,它是一种不同的东西 - 基本上,它是除了反向引用之外的所有文字字符的模板。*所以,你不要#39; t想要尝试转义引号,除非你想在结果中使用字面反斜杠。
所以:
>>> re.sub(r'href = \"(.*)\".*>', r'href = "\1">', text)
'href = "www.google.com">'
这在正则表达式HOWTO中的Search and Replace中有更详细的解释。
*或者它可以是一个获取每个匹配对象并返回一个字符串的函数。
答案 1 :(得分:0)
实现目标的另一种方法是获取子字符串。不需要正则表达式。我们的想法是使用字符串方法index()
找到第二个双引号字符。
对于名为input
的字符串,此表达式为您提供第二个双引号字符的位置:
input.index('"', input.index('"')+1)
如果该值为k
,请写input[:k+1]
以提取所有内容,包括第二个双引号字符。
在Python解释器中尝试以下内容。
input = 'href = "www.google.com" onmouseover=hax0rFunction()>'
k = input.index('"', input.index('"')+1)
input[0:k+1]