Какое регулярное выражение будет захватывать все: от метки до конца строки?

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

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

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

Ответ 1

'.*

Я считаю, что вам нужна опция Multiline.

Ответ 2

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

'.*$

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

(?<=').*$

В основном это говорит мне, что все символы, следующие за char, до конца строки.

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

'.* 

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

Ответ 3

'.*$

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

Ответ 4

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

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

'.*?\n

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

Ответ 5

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

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

Быстрая модификация: если строка не имеет '- backreference 1, все равно следует поймать всю строку.

^ - start of string
([^']*) - capture any number of not ' characters
'? - match the ' 0 or 1 time
(.*) - capture any number of characters
$ - end of string

Ответ 6

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

'([^\n]+)$

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

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

'[^\n]+\n

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

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

'[^$]+$