正则表达式查找和替换:删除所有*除*匹配

时间:2016-04-18 01:34:59

标签: regex notepad++

我正在使用Notepad ++从HTML中删除除ID匹配('idxxxxxx')之外的所有内容。这是(部分)HTML:

{
    href : "/id123456",
    title : "Book 1",
    year : "2013",
},
                {
    href : "/id234567",
    title : "Book 2",
    year : "2014",
},
{
    href : "/id345678",
    title : "Book 3",
    year : "2015",
}

此正则表达式的行为不符合预期:

[^id\d{6}]

不是留下所有匹配的'idxxxxxx',而是留下部分:数字序列,任何'id'实例,不一定是6位数字等

3 个答案:

答案 0 :(得分:1)

您可以使用分支重置。

查找(?s)(?|.*?(id\d{6})|.*())
替换$1

 (?s)                   # Dot-all
 (?|                    # Branch Reset
      .*? 
      ( id \d{6} )           # (1)
   |  
      .* 
      ( )                    # (1)
 )

答案 1 :(得分:0)

试试这个:

(?s).*?(id\d{6})|(?!id\d{6}).*$

它使用否定!?。多行修饰符(?s)

你的正则表达式显然是错误的。 [^id\d{6}]表示任何一个不是id\{}6的字符。< / p>

答案 2 :(得分:0)

Find what:     [\s\S]+?/(id\d+)|[\s\S]*
Replace with:  \1\n

输出:

id123456
id234567
id345678