Какой Regex будет захватывать все, начиная от знака и до конца строки? - PullRequest
98 голосов
/ 06 мая 2009

У меня есть текстовый файл, который обозначает замечания одним '.

В некоторых строках есть две кавычки, но мне нужно получить все из первого экземпляра ' и перевода строки.

I AL01                  ' A-LINE                            '091398 GDK 33394178    
         402922 0831850 '                                   '091398 GDK 33394179    
I AL02                  ' A-LINE                            '091398 GDK 33394180    
         400722 0833118 '                                   '091398 GDK 33394181    
I A10A                  ' A-LINE 102                       '  53198 DJ  33394182    
         395335 0832203 '                                  '  53198 DJ  33394183    
I A10B                  ' A-LINE 102                       '  53198 DJ  3339418

Ответы [ 6 ]

126 голосов
/ 06 мая 2009
'.*

Я полагаю, вам нужна опция, Multiline.

76 голосов
/ 06 мая 2009

Соответствующим регулярным выражением будет 'char, за которым следует любое количество любых символов [включая нулевые символы], заканчивающихся концом строки / токена строки:

'.*$

И если вы хотите захватить все после символа ', но не включить его в вывод, вы должны использовать:

(?<=').*$

Это в основном говорит, дайте мне все символы, которые следуют за символом до конца строки.

Редактировать : было отмечено, что $ неявно используется при использовании. * И поэтому строго не требуется, поэтому шаблон:

'.* 

технически корректен, однако яснее быть конкретным и избежать путаницы для последующего обслуживания кода, поэтому я использую $. Я считаю, что всегда лучше объявить явное поведение, чем полагаться на неявное поведение в ситуациях, когда ясность может быть поставлена ​​под сомнение.

19 голосов
/ 06 мая 2009
'.*$

Начиная с одинарной кавычки ('), сопоставляйте любой символ (.) ноль или более раз (*) до конца строки ($).

8 голосов
/ 21 сентября 2015

Когда я пробовал '. * В Windows (Notepad ++), он совпадал бы со всем после первой' до конца последней строки.

Чтобы захватить все до конца этой строки, я набрал следующее:

'.*?\n

Это только захватит все от 'до конца этой строки.

4 голосов
/ 01 июня 2016

В вашем примере я бы пошел по следующей схеме:

'([^\n]+)$

использовать многострочные и глобальные параметры для соответствия всем вхождениям.

Чтобы включить перевод строки в матче, вы можете использовать:

'[^\n]+\n

Но это может пропустить последнюю строку, если у нее нет перевода строки.

Для одной строки, если вам не нужно совпадать с переводом строки, я бы предпочел использовать:

'[^$]+$
3 голосов
/ 06 мая 2009

Это будет захватывать все до 'в обратной ссылке 1 - и все после' в обратной ссылке 2. Вам может потребоваться избежать апострофов, хотя в зависимости от языка (\ ')

/^([^']*)'?(.*)$/

Быстрое изменение: если строка не имеет '- обратная ссылка 1 все равно должна перехватить всю строку.

^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...