2014-11-01 3 views
0

Вопрос:Как выбрать все, кроме группы захвата с помощью Regex?

Забудьте все, что ниже на секунду, так как моя деталь, кажется, путает людей (или же это действительно сложная).

Я хочу совместить с регулярным выражением «все, кроме того, что соответствует этой (любой) группе захвата».

Что я пробовал:

I saw this question, но ответы и вопрос все говорят об одной ситуации, фактически не объясняя, как/почему синтаксис работает, так что я не могу понять это.

Я посмотрел на «негативный взгляд вперед» с ?!, но на самом деле не понимаю, как это достигает того, что я пытаюсь сделать.

Я пытаюсь совместить все, кроме группы захвата, например ("[a-z]*",).

К примеру, в этом списке многострочного:

"buckeye", 
"buckeye" 
, 
." 
," 
"fbfdb 
"feve, 

Как выбрать все, кроме группы захвата (в моем случае должен соответствовать "buckeye", или любой набор " + любое кол-аз символов + ",) с Regex?


Причина это нужно, потому что у меня есть файл с большим количеством записей, таких как:

"aidman", 
"aidmen", 
"aids", 
"aiglet", 
"aiglets", 
"aigret", 
"aigrets", 
"aigrette", 
"aigrettes", 
"aiguille", 
"aiguilles", 
"aikido", 

и я провел несколько замен с моим текстовым редактором на нем, чтобы изменить формат, но связка случайных вещей произошло до ~ 20 из 100 000 строк (ошибка). Поэтому мне нужно найти неправильно отформатированные строки.

Разъяснение:

Моей цель на этот вопрос просто, чтобы понять, как сказать: «Я хочу, чтобы соответствовать все, кроме этого захвата группы».

+1

Я не понимаю, что означает «все, кроме группы захвата». Дайте нам несколько примеров того, что вы хотите сопоставить, и то, что вы не хотите сопоставлять. – Dialecticus

+0

@ Dialecticus я уточнил выше, извините. Но на самом деле, я пытаюсь научиться делать это с * любой группой захвата. –

+0

Каким будет ожидаемый результат? –

ответ

0

Вы можете использовать PCRE глагол (*SKIP)(*F),

"[^"]*",(*SKIP)(*F)|.+ 

DEMO

выше регулярное выражение будет пропускать все "...", строки и сопоставляет оставшиеся строки.

ИЛИ

Через отрицательного опережения утверждения,

^(?!.*"[^"]*",).*$ 

DEMO

(?!.*"[^"]*",) отрицательное опережения утверждает, что не является строкой, как "...", в этой конкретной линии. Если да, то соответствующая строка будет сопоставлена. Образцы в регулярном выражении используются для проверки состояния.Он не будет потреблять никаких символов, но он утверждает, произойдет ли совпадение или нет.

^      the beginning of the string 
(?!      look ahead to see if there is not: 
    .*      any character except \n (0 or more 
          times) 
    "      '"' 
    [^"]*     any character except: '"' (0 or more 
          times) 
    ",      '",' 
)      end of look-ahead 
.*      any character except \n (0 or more times) 
$      before an optional \n, and the end of the 
         string 
+0

вы имеете в виду это http://regex101.com/r/uC2uV8/3? –

+0

О, это работает так, как есть! Спасибо. Хотелось бы, чтобы вы могли объяснить это, поэтому я буду знать, как это сделать в будущем. –

+0

@ jt0dd какой? первый или второй .. Я думаю, что я уже объяснил второй. Скажи мне, какую часть ты не понимал. –

0

Итак, вы хотите, чтобы найти ошибки в файле, где правильная линия находится в форме "[a-z]*",. Хотя я не могу сказать, как это сделать в регулярном выражении, я могу сказать, как я достиг бы этой цели. Я хотел бы использовать Notepad ++ в несколько этапов:

  1. Ctrl + F, вкладка Переход от Найти Марку, отметьте опцию «Закладка линии», и поиск по шаблону "[a-z]*",.
  2. Когда все правильные строки занесены в закладки, инвертируйте закладки (меню «Поиск»> «Закладка») «Инверсная закладка»
  3. Скопируйте все закладки в закладки (меню «Поиск»> «Закладка»> «Скопировать закладки») и вставьте их в другой пустой файл (Ctrl + V)
+0

спасибо, что это косвенно удивительно, поскольку он экономит Я так удивлен, что никто, кажется, не знает, как делать «все, кроме этой группы захвата» в регулярном выражении! –

Смежные вопросы