EmEditor中筛选两列指定字符数量不匹配行的表达式咨询
在EmEditor里筛选两列指定字符数量不匹配的行
前提说明
假设你的内容是制表符分隔的两列(如果用逗号、空格或其他分隔符,把表达式里的\t换成对应符号即可)。
正则表达式模板(以目标字符(为例)
直接用这个表达式,就能找出两列中(数量不一致的行:
^(.*?(?=\t))\t(.*)$(?<!(^(?:[^\(]*\(){1}[^\(]*\t(?:[^\(]*\(){1}[^\(]*$)))(?<!(^(?:[^\(]*\(){2}[^\(]*\t(?:[^\(]*\(){2}[^\(]*$)))(?<!(^(?:[^\(]*\(){3}[^\(]*\t(?:[^\(]*\(){3}[^\(]*$)))
如果要换其他目标字符(比如)、,),只需要把表达式里所有的\(替换成对应的字符即可(特殊字符需转义,比如)换成\),普通字符如,直接替换就行)。
表达式逻辑
核心是反向排除法:先匹配所有行,再逐一排除掉两列目标字符数量相等的行(比如两列都有1个、2个、3个目标字符的行),剩下的就是数量不匹配的行。如果你的数据里目标字符出现次数更多,照着现有格式多添加几段(?<!...)内容,把括号里的数字改成对应的次数即可。
操作步骤
- 打开EmEditor,按下
Ctrl+F调出查找窗口 - 勾选「正则表达式」模式
- 粘贴调整好的正则表达式
- 点击「查找全部」,所有符合条件的行就会被选中
内容的提问来源于stack exchange,提问作者Georg Kirchner
相关产品推荐
相关产品推荐

