正则匹配文本块时如何排除末尾由连续等号组成的分隔模式
正则匹配排除末尾连续等号分隔符的解决方案
核心解决思路是利用正向前瞻断言做边界限制,同时调整匹配规则为非贪婪模式,既保留文本块内部的单个等号、=>等合法内容,又不会把末尾的连续等号分隔符纳入匹配结果。
修改后的正则表达式
(\d{2}-\d{2}-\d{4} \d{2}:\d{2}) (.*?)(Statut)([\s\S]*?)(?=\n={2,})
改动说明
- 将原正则中第二组的
.*改为.*?:开启非贪婪匹配,避免用户名部分异常吞噬后续的Statut标识 - 将原正则最后一组的字符集贪婪匹配改为
[\s\S]*?:[\s\S]匹配所有字符(包含换行符,适配多行文本块需求),加?开启非贪婪模式,匹配到分隔符边界就停止 - 末尾新增
(?=\n={2,})正向前瞻断言:要求匹配内容的后置边界为「换行+至少2个连续等号」,断言属于零宽匹配,不会被计入最终的捕获结果,自然排除了末尾的等号分隔符
如果你需要保留原有的字符范围限制,也可以把
[\s\S]*?替换回你原来的[,:. aA-zZ0-9À-ÖØ-öø-ÿ=><\n\r]*?,只要保留末尾的非贪婪标记?和正向前瞻断言即可。
内容的提问来源于stack exchange,提问作者Broshet
相关产品推荐
相关产品推荐

