使用Python正则表达式来清理输入字符串

时间:2014-11-26 00:07:54

标签: python regex

我有字符串: text = 'href = "www.google.com" onmouseover = blahblah >' 我想要'href = "www.google.com">'

目前,我的功能如下:

text = re.sub(r'href = \".*\".*>', 'href = \".*\">', text)

最终删除网站链接并将其替换为字符串'。*' 。我想我应该以某种方式使用?Pname?但是不知道如何正确地写它以便我得到正确的输出。

2 个答案:

答案 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]