使用正则表达式替换python中字符串中的第n个子字符串

时间:2016-02-19 03:50:32

标签: python regex string

我正在编写一个函数来一次编辑html文件中的许多字符串。然而,这些要求有点特殊。这是一个例子。

我的字符串:

a href='http://en.wikipedia.org/wiki/Velocity'>
<img src="/uploads/3/3/9/3/3393839/____________________________________________________________________________________________________________________________________________________614162727.png" alt="Picture" style="width:100%;max-width:220px" />
</a>
<div style="display:block;font-size:90%"></div>
</div></div>

</td>
<td class='wsite-multicol-col' style='width:50%;padding:0 5px'>

<div><div class="wsite-image wsite-image-border-none " style="padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;text-align:right">
<a href='http://www2.franciscan.edu/academic/MathSci/MathScienceIntegation/MathScienceIntegation-827.htm'>
<img src="/uploads/3/3/9/3/3393839/___________________________________________________________________________________________________________________________________308536556.png" alt="Picture" style="width:100%;max-width:595px" />
</a>

实际字符串更长!我正在尝试将所有引用维基百科链接的图像替换为一个图像,并将所有引用另一个链接的图像替换为另一个图像。

这是我到目前为止所拥有的:

wikiPath = r"www.somewebsite.com/myimage.png"

def dePolute(myString):

    newString =""

    # Last index found
    lastIndex = 0


    while True:
        wikiIndex = myString.index('wikipedia',lastIndex)
        picStartIndex = myString.index('<img ', wikiIndex)
        picEndIndex = myString.index('/>', wikiIndex)

        newString = re.sub(r'<img.*?/>','src="' + wikiPath ,myString,1)

    return newString 

所以这显然不起作用 - 但我的想法是首先找到所有这些链接存在的'wiki'关键字的索引,以及从该索引开始的img标记之间的sub。不幸的是我不知道怎么做re.sub但是从特定索引开始。我不能做newString = re.sub(规范,newEntry,originalString [wikiIndex:])因为那会返回一个子字符串,而不是整个字符串。

这是我希望My String在程序运行完毕后的样子:

a href='http://en.wikipedia.org/wiki/Velocity'>
<img src="www.somewebsite.com/myimage.png" alt="Picture" style="width:100%;max-width:220px" />
</a>
<div style="display:block;font-size:90%"></div>
</div></div>

</td>
<td class='wsite-multicol-col' style='width:50%;padding:0 5px'>

<div><div class="wsite-image wsite-image-border-none " style="padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;text-align:right">
<a href='http://www2.franciscan.edu/academic/MathSci/MathScienceIntegation/MathScienceIntegation-827.htm'>
<img src="/uploads/3/3/9/3/3393839/___________________________________________________________________________________________________________________________________308536556.png" alt="Picture" style="width:100%;max-width:595px" />
</a>

1 个答案:

答案 0 :(得分:4)

我会使用HTML解析器,例如BeautifulSoup

我们的想法是使用 CSS选择器来查找位于img a内的wikipedia元素内的href个元素。对于每个img元素,请替换src属性值:

from bs4 import BeautifulSoup

data = """your HTML"""

soup = BeautifulSoup(data, "html.parser")

for img in soup.select("a[href*=wikipedia] img[src]"):
    img["src"] = wikiPath

print(soup.prettify())