如何在Notepad++中使用多行RegEx搜索符合要求的连续日程
解决方案
前置设置
- 打开Notepad++查找(快捷键
Ctrl+F)窗口,切换到对应操作选项卡 - 底部搜索模式选择「正则表达式」
- 勾选「.匹配换行符」选项,开启跨行匹配能力
正确正则表达式
Language((?:(?![A-Z]{2}\d{3}[\u4e00-\u9fa5]+|Date).)*)Date
如果教师标识的姓名部分包含英文、数字等非中文字符,可将姓名匹配规则调整为非贪婪匹配,修改后正则为:Language((?:(?![A-Z]{2}\d{3}.+?|Date).)*)Date
如果需要提取Language和Date之间的内容,直接取第一个分组的匹配结果即可。
规则说明
核心使用否定式正向预查,在匹配中间每一个字符时都做两次校验:
- 接下来的内容不能是教师标识(两位大写字母+三位数字+姓名)
- 接下来的内容不能是
Date关键字
满足以上两个条件的字符才会被匹配,直到碰到Date关键字停止,不会跨教师匹配。
之前正则失效的原因
Language(.+?)Date:没有做教师标识过滤,只要中间存在Date就会匹配,会跨多个教师的日程- 带
(?![A-Z][A-Z]\d{3})的版本:负向预查放在了(.+?)之后,只会在(.+?)匹配结束后判断一次,不会在匹配过程中每一步校验,只要最终匹配到的Date前没有紧挨着教师标识就会返回结果,无法过滤中间存在教师标识的场景。
内容的提问来源于stack exchange,提问作者HiM
相关产品推荐
相关产品推荐

