2017-01-24 3 views
0

Я знаю, это похоже на еще один повторяющийся вопрос, но я не могу заставить его работать.Negate regex Notepad ++

My pattern :\d\s" отлично работает, но когда я пытаюсь добавить отрицание, чтобы найти строки, которые не содержат вышеуказанное регулярное выражение, n ++ не находит. Я пробовал (?!:\d\s"), с различными вариантами диких карт, но безрезультатно.

Образец данных:

blah_blah:0 "More blah..."

blah_blah:0 More blah..."

(пространство в начале и \n в конце строк).

Я хочу, чтобы убрать недостающую цитату, например (см. Вторую строку).

UPD: Мне нужно инвертировать регулярное выражение, чтобы найти неправильно отформатированные строки.

+1

Образец данных, которые вы хотите сопоставить, вместе с данными sele, которые не должны xmatch, были бы полезны. –

+0

Я знаю, ': \ d \ s \ w' будет работать, но будет полезно узнать другие способы. –

+0

Включите эти строки '' Я пытаюсь добавить отрицание, чтобы найти строки, которые не содержат указанное выше выражение '' – MYGz

ответ

2

Используйте :\d\s" регулярное выражение в вкладке Mark (просто проверить линию вариант закладки) и после нажатия Отметить все, нажмите Поиск ->Закладка ->Обратный вклад.

Если вы хотите регулярное выражение способа решения этой задачи необходимо использовать

^(?!.*:\d\s").+ 

Это регулярное выражение будет выделить непустая строка не имеет соответствия для :\d\s" шаблона.

Детали:

  • ^ - начало линии
  • (?!.*:\d\s") - что не имеет :, цифры, пробелы и " после любых 0+, кроме разрыва строки символов
  • .+ гольцов - любые 1 или более символов, кроме символов разрыва строки

enter image description here

+0

Ничего, не знал о '^', соответствующем началу новой строки в некоторых текстовых редакторах, таких как Notepad ++. Обычно это начало строки. –

+0

@ ssc-hrep3: Да, собственно, привязки и границы слов работают очень необычно на АЭС. Просто для удовольствия попробуйте '\ A \ w' ->' \ ($ & \) 'на любом документе с помощью * Replace All *. –

+0

Я не упоминал никаких параметров, которые должны быть включены. Таким образом, *.. 'Match newline * должен быть отключен, как и по умолчанию. –

1

Вы могли бы использовать это регулярное выражение:

(?:^|\r?\n)(?!.*?:\d\s.*?).*?(?=\r?\n|$) 

Это будет соответствовать все между символами конца строки (или начало/конец документа), который не содержит :\d\s в нем.

  • (?:^|\r?\n) соответствует началу документа или начало строки (UNIX и Windows, окончания строк разрешено) в несогласующейсе группы (?:).
  • (?!.*?:\d\s.*?).*? соответствует всем, кроме .*?\:\d\s.*?.
  • (?=\r?\n|$) отмечает положительный результат для строки \r\n или документа, заканчивающегося $. Положительный lookahead необходим, потому что окончание строки в противном случае уже соответствовало бы первой части регулярного выражения. По сути, он пропускал бы каждую вторую строку, если бы эта часть тоже соответствовала (перекрытие невозможно в регулярном регулярном выражении).

Вот пример в JavaScript:

var regex = /(?:^|\r?\n)(?!.*?:\d\s.*?).*?(?=\r?\n|$)/g; 
 
var text = document.getElementById("main").innerHTML; // read the line of the HTML snippet (easier to write lines in HTML); 
 
var match = text.match(regex); 
 
console.log(match);
<div id="main"> 
 
    line:1 abc123abc123 
 
    line: abc123abc123 
 
    line:3 abc123abc123 
 
    line:4abc123abc123 
 
    line:5 abc123abc123 
 
    line6 abc123abc123 
 
    lineabc123abc123 
 
</div>

+0

К сожалению, это не работает в N ++. Он находит только один экземпляр, и это даже не желаемое значение o_0 только в последней строке. –

+0

@AlCrow Это работает для меня в Notepad ++, просто скопируйте мои строки в новый файл, ищите полное регулярное выражение '(?:^| \ R? \ N) (?!. *?: \ D \ s. * ?). *? (? = \ r? \ n | $) 'и соответствует 4 строкам. Мне пришлось отключить флажок, хотя ('.' находит' \ r' и '\ n'). –

+0

Спасибо, он работает с непроверенной коробкой. Можно отметить только одно решение, извините. –