如何在正则表达式代码中查找和替换

时间:2018-06-04 13:52:44

标签: regex

我正在尝试在正则表达式代码中找到并替换

<div class="gallery-image-container">
    <div jstcache="1116"
         class="gallery-image-high-res loaded"
         style="width: 396px;
                height: 264px;
                background-image: url(&quot;https://lh5.googleusercontent.com/p/AF1QipMcTfMPZj_d5iip9WKtN2SQB9Je5U4rRB0nT_t8=s396-k-no&quot;);
                background-size: 396px 264px;"
         jsan="7.gallery-image-high-res,7.loaded,5.width,5.height,5.background-image,5.background-size">
    </div>
</div>

在上面的代码中,我使用了这个

(https:\/\/[^&]*)

提取此网址

https://lh5.googleusercontent.com/p/AF1QipMcTfMPZj_d5iip9WKtN2SQB9Je5U4rRB0nT_t8=s396-k-no

我使用此正则表达式s\d{3}来获取s396

现在我想将s396替换为网址

中的s1000

现在是股票,不知道如何去做。

那么所有这些都可以在一个正则表达式代码而不是多个代码中完成吗?

1 个答案:

答案 0 :(得分:0)

我建议使用HTML解析器,但我知道有时候这是不可能的。这是python中的一个小例子。

import re

data = '''
<div class="gallery-image-container">
    <div jstcache="1116"
         class="gallery-image-high-res loaded"
         style="width: 396px;
            height: 264px;
            background-image: url(&quot;https://lh5.googleusercontent.com/p/AF1QipMcTfMPZj_d5iip9WKtN2SQB9Je5U4rRB0nT_t8=s396-k-no&quot;);
            background-size: 396px 264px;"
         jsan="7.gallery-image-high-res,7.loaded,5.width,5.height,5.background-image,5.background-size">
    </div>
</div>
'''
match = re.search("(https?://[^&]+)", data)
url = match.group(1)
url = re.sub("s\d{3}", "s1000", url)
print(url)

他们的关键部分是

的正则表达式
(https?://[^&]+)

使用负字符类。它是说,使用可选http后跟s查找://,然后查找所有 &您可以使用此网站进行游戏正则表达式:

https://regex101.com/r/b0APFA/1

我确信你可以做一个聪明的1衬里嵌套正则表达式来一次查找和替换所有,但是如果你有几行就可以更容易地进行故障排除。