You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:如何用正则表达式移除列表中匹配指定子串的URL?

解决URL列表中排除末尾为/6位数字/格式的问题

原代码问题分析

  • 第一次尝试使用re.match:该方法仅从字符串起始位置匹配,而目标模式(/\d{6}/)位于URL末尾,因此永远无法匹配,导致筛选结果与原列表一致。
  • 第二次尝试逻辑错误:将re.match的结果(匹配对象或None)直接判断是否在列表中,完全不符合正则匹配逻辑;同时遍历原列表时直接调用remove会导致索引错乱,跳过部分元素。

正确实现方案

方案1:列表推导式+锚定末尾的正则

使用$锚定字符串结尾,确保匹配的是URL末尾的/6位数字/格式,结合列表推导式快速筛选:

import re

# 示例URL列表
url_list = [
    'www.test.com/nothere/432432/',
    'www.test.com/nothere/685985/',
    'www.test.com/nothere/abc123/',
    'www.test.com/nothere/12345/'
]
# 正则规则:匹配末尾为 /6位数字/ 的字符串
pattern = re.compile(r'/\d{6}/$')
# 筛选出不匹配该规则的URL
filtered_urls = [url for url in url_list if not pattern.search(url)]

print(filtered_urls)
# 输出结果: ['www.test.com/nothere/abc123/', 'www.test.com/nothere/12345/']

方案2:遍历列表移除匹配项(避免索引问题)

遍历列表副本进行判断,避免直接修改原列表导致的遍历异常:

import re

allAdLinks = [
    'www.test.com/nothere/432432/',
    'www.test.com/nothere/685985/',
    'www.test.com/nothere/abc123/'
]
pattern = re.compile(r'/\d{6}/$')

# 遍历列表副本,防止原列表修改影响遍历流程
for ad_link in allAdLinks.copy():
    if pattern.search(ad_link):
        allAdLinks.remove(ad_link)
        print(f"移除匹配项后列表: {allAdLinks}")
    else:
        print(f"保留非匹配项: {ad_link}")

# 最终结果: ['www.test.com/nothere/abc123/']

内容的提问来源于stack exchange,提问作者Andrew Glass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:35:22