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

如何用re.search()忽略文本空格匹配字符串?Python正则问题

自动画廊加载程序的正则匹配优化需求

现有代码

目录遍历代码

import os

os.chdir("Obras 2023")

carpetas = list(filter(os.path.isdir, os.listdir()))

这段代码导入os模块,切换工作目录至Obras 2023,将该目录下的所有子目录列表赋值给变量carpetas。

正则检查代码

with open("galerias.php", "r") as f:
    text = f.read()

import re

for folder in carpetas:
    if re.search(r"(?i)\b{}\b".format(folder), text, flags=re.IGNORECASE):
        continue
    else:
        print(f"The folder {folder} is not within the text of galerias.php")

这段代码读取galerias.php的内容,遍历每个子目录名,用正则检查目录名是否存在于文件内容中,若不存在则输出提示。

需求说明

需要修改正则匹配逻辑,实现忽略目标文本(galerias.php内容)中的空格进行匹配:

  • 示例1:搜索目录名La Pastoriza 2023时,若文本中包含LaPastoriza&tit=2023,判定为匹配,不输出提示;
  • 示例2:搜索目录名Love时,若文本中无任何匹配内容(忽略空格后也无对应字符串),则输出提示信息。

解决方案

场景1:允许目录名空格位置匹配文本中任意内容(含无内容)

核心是将目录名中的空格替换为匹配任意字符的正则片段,同时保留忽略大小写规则:

with open("galerias.php", "r") as f:
    text = f.read()

import re

for folder in carpetas:
    # 转义目录名特殊字符,将空格替换为非贪婪匹配任意字符的正则片段
    pattern_str = re.escape(folder).replace(r"\ ", r".*?")
    pattern = re.compile(r"(?i)" + pattern_str)
    if pattern.search(text):
        continue
    else:
        print(f"The folder {folder} is not within the text of galerias.php")
  • re.escape(folder):避免目录名中的特殊字符(如.、&)干扰正则语法;
  • .*?:非贪婪匹配任意数量的任意字符,确保不会过度匹配无关内容;
  • (?i):实现忽略大小写匹配。

场景2:仅忽略文本中的空格(不允许其他字符替代)

若仅需忽略文本中的空格,将空格替换为匹配0个或多个空格的正则片段即可:

with open("galerias.php", "r") as f:
    text = f.read()

import re

for folder in carpetas:
    pattern_str = re.escape(folder).replace(r"\ ", r"\s*")
    pattern = re.compile(r"(?i)" + pattern_str)
    if pattern.search(text):
        continue
    else:
        print(f"The folder {folder} is not within the text of galerias.php")
  • \s*:匹配0个或多个空格(包括制表符、换行符等空白字符),精准忽略文本中的空白内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:39:52