Notepad++正则标记连续数字开头行,排除季度格式行问题
Notepad++正则匹配连续数字开头行的问题
输入文本示例:
ABC 1,234,543 DFGHH 1234 HRHYTTJ JTJYMYUY 1,456 23,567 hhtyjtyj 43,679 1969Q3
需要标记的目标内容:
1,456 23,567
原正则表达式^\d+.*\R(\d+.*)$能匹配连续数字开头的行,但会误标1969Q3这类季度格式的行。我自己写的正则^(?!\d{4}Q[1-4])[^\d+.*\R(\d+.*)$]+完全没用,请问这个正则问题出在哪?
你的正则为啥无效?
- 字符组用法完全错误:你写的
[^\d+.*\R(\d+.*)$]+是字符组,里面的+、.、*、\R等符号都是普通字符,不是正则语法,意思是匹配不包含数字、+、.、*、\R、(、)、$的字符,这跟你要找连续数字行的需求完全不沾边。 - 预查与后续匹配脱节:
^(?!\d{4}Q[1-4])是行首的负向预查,用来排除季度行,但后面的字符组根本没关联数字开头的逻辑,等于预查白写了,整个正则逻辑完全混乱。
正确的正则写法
要匹配连续两行都以数字开头,同时排除季度格式(ddddQ1-Q4)的行,用这个正则就行:
^(?!\d{4}Q[1-4])\d+.*\R(?!\d{4}Q[1-4])\d+.*$
^(?!\d{4}Q[1-4])\d+.*:匹配行首不是季度格式的数字开头行\R:匹配换行符(兼容Windows/Linux不同换行格式)(?!\d{4}Q[1-4])\d+.*$:匹配下一行同样不是季度格式的数字开头行
如果要单独标记这两行里的每一行,用Notepad++的书签功能,配合这个查找正则:
(?:^(?!\d{4}Q[1-4])\d+.*\R)?^(?!\d{4}Q[1-4])\d+.*(?=\R?(?:^(?!\d{4}Q[1-4])\d+.*$)?)
点击「标记全部」,就能把所有符合要求的行都标出来。
内容的提问来源于stack exchange,提问作者Pubg Mobile
相关产品推荐
相关产品推荐

