2017-07-25 54 views
1

我有你们中的大多数人可能会考虑解决一个轻而易举的问题。如何找到所有出现x次以上字符的行,Notepad ++?

我有一个像这样格式化的列表;

?d?d?d?d?l?d?d?d 
?d?d?d?d?l?d?d?l 
?d?d?d?d?l?d?d?u 
?d?d?d?d?l?d?l?d 
?d?d?d?d?l?d?l?l 

有成千上万条这样的线条。我想要一个正则表达式,它将选择包含字母d的5次以上的所有行,以便它们可以从列表中删除。

尽管搜索广泛,我还没有找到一个可行的解决方案。我发现了很多在这个和其他论坛(包括空间和特殊字符)上搜索字符出现等的方法,并且能够成功地对其他字词列表进行搜索,但是我认为所有这些问题的存在标记螺丝起来......但我不能肯定地说。

如果我不知何故错过了一篇完美解释这篇文章的帖子,我很抱歉,但我已经努力寻找解决方案,并且对此感到愤怒。

非常感谢您提供的任何帮助!

回答

0

使用查找和替换,更换匹配一无所有以下行:

^.*(d.*){6}.*\r\n 

说明:

^- 开始在一行 的开头* - 跳过0以上无趣的字符,但不是。行末 (d。) - 找到d后跟任何不感兴趣的字符,但不在行结尾 {6} - 重复最后一组六次(因此6 d后跟任何事情) 。 - 匹配任何剩余字符,直到达到结束线 的\ r \ n - 能匹配线序列结束(如通过@toto指出的,更好为\ r

参见https://regex101.com/r/UaYAz4/1

+0

令人惊讶的是,这似乎工作...虽然没有在网上的沙箱上工作,但奇怪的是。 感谢您的帮助! –

+0

你必须小心在线评估,有很多正则表达式引擎,你必须确保选择一个匹配的,另外在你的情况下Notepad ++的行结束是\ r \ n(因为Windows),但其他系统可能使用\ n(Unix/Linux/Mac)甚至\ r。 – NetMage

+0

为什么不用$来匹配行的末尾。此外,这恰好匹配了6次。 – 3ocene

1

在不具有记事本++安装的,我期望^.*(?:d.*){5,}$ (regex101)做你想要的东西:

  • ^开始在该行的开始
  • .*匹配任意字符0次或更多次(忽略未任何字符。 。在该行的开始)
  • (?:d.*){5,}匹配以下5次或更多次:
    • d字母d。
    • .*任何字符0次或更多次。 (忽略d之间的任何字符)
  • $匹配行结束。

正如NetMage指出的那样,这会留下空行。要解决此问题,请使用\r?\n而不是$。这匹配:

  • \r?如果使用Windows可选回车。
  • \n换行符。
+0

“超过5次出现”:)很好地使用可选的'\ r',虽然也许'[\ r \ n] {1,2}'更重要。 – NetMage

+1

@NetMage这将匹配'\ n \ n'这可以删除一个空行。 – 3ocene

+1

最好使用匹配任何类型的换行符,\ r'或'\ n'或'\ r \ n'的\ R' – Toto

相关问题