如何用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
相关产品推荐
相关产品推荐

