正则表达式搜索

时间:2015-01-07 04:48:01

标签: regex

我已经获得了大约1500行的列表。我试图写一个正则表达式来找到那些不包含8个字符串的正则表达式?d。现在的问题是,在中间可能还有其他角色。我并不关心那里的其他角色,但我确实需要8个(全部)的角色。

例如,这一行是可以的:?d?u?d?u?d?d?d?d?d?d(8?d)

这一行不是:?d?d?d?d?u?d?d?d?d?u?d(9?d)

这一行不是:?d?l?u?d?d?d?d?d?d?d?(9?d)

问题是其他字符(它们是?u和?l)可能出现在该行的任何位置。是否有正则表达式或一系列正则表达式可以做到这一点?我正在使用Notepad ++正则表达式。

不必一次性完成所有操作。例如,我已经对[\?d] {9,11}进行了正则表达式搜索,这有帮助,但只消除了27条坏线。

3 个答案:

答案 0 :(得分:3)

这可以满足您的需求:

^(?=(?:\?d.*?){8})(?!(?:\?d.*?){9}).+$

Demo

从头开始,确保该行包含8个?d组,但如果它包含9个(或更多),则拒绝它。完整的解释:

  • ^字符串的开头
  • (?=(?:\?d.*?){8})积极前瞻:必须遵循此模式:(?:\?d.*?){8}
    • \?d.*?匹配文字字符串?d,后跟零个或多个字符,根据需要匹配
    • {8}在前一个模式的行中出现8次
  • (?!(?:\?d.*?){9})否定前瞻:不得跟随此模式:(?:\?d.*?){9}
    • \?d.*?匹配文字字符串?d,后跟零个或多个字符,根据需要匹配
    • {9}前一个模式的一行中出现了9次
  • .+匹配任何字符
  • $字符串结尾

答案 1 :(得分:0)

编辑
使用这种模式

^(?!(?:(?:[^?]|\?(?!d))*?\?d){8}(?:[^?]|\?(?!d))*$)(.*)

Demo

答案 2 :(得分:0)

^(?!(?:[^d]*\?d){8}$).*$

你可以试试这个简单的正则表达式。参见演示。

https://regex101.com/r/uH5sT1/2