求Python正则表达式:匹配除三个连续双引号外的所有内容
解决Python中匹配不含三个连续双引号行的正则问题
我明白你遇到的困扰了——之前的负向预查只盯着行首是否是三个双引号,没法排除行内任意位置包含"""的整行,要么会误匹配部分内容,要么逻辑根本不对。
要实现「只匹配完全不包含三个连续双引号的行」,你需要调整断言的覆盖范围,确保整个行里都不存在"""。这里有个精准的正则方案:
^(?!.*""").*$
正则逻辑拆解:
^:匹配每一行的开头(必须配合re.MULTILINE标志才会生效,否则只会匹配整个文本的开头)(?!.*"""):负向预查,断言从行首开始,往后所有位置都不会出现三个连续双引号(.*负责覆盖行内所有可能的位置).*:匹配整行的所有内容(直到行尾)$:匹配每一行的结尾(同样依赖re.MULTILINE标志)
Python代码示例:
import re # 你的测试文本 test_text = """Lorem Ipsum """ sdsdfgsdf """ bar another line """ test """ last line""" # 执行匹配,务必加上re.MULTILINE标志 valid_lines = re.findall(r'^(?!.*""").*$', test_text, re.MULTILINE) print(valid_lines) # 输出结果:['Lorem Ipsum', 'bar', 'another line', 'last line']
为什么之前的正则失效?
你之前用的(?!""").*只检查了**当前位置(行首)**后面不是三个双引号,但如果"""出现在行中间,这个正则还是会匹配整个行(包括"""部分),没法排除整行。而^(?!.*""").*$通过.*把断言范围扩展到了整行,确保只要行内任何位置有三个连续双引号,就直接排除该行。
内容的提问来源于stack exchange,提问作者tuxtimo
相关产品推荐
相关产品推荐

