Ответ 1
'.*
Я считаю, что вам нужна опция Multiline.
У меня есть текстовый файл, который обозначает примечания с одним '
.
В некоторых строках есть две кавычки, но мне нужно получить все из первого экземпляра '
и строки.
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
'.*
Я считаю, что вам нужна опция Multiline.
Соответствующим регулярным выражением будет < char, за которым следует любое количество любых символов (включая нулевые символы), заканчивающиеся на конец токена строки/строки:
'.*$
И если вы хотите захватить все после char, но не включать его в вывод, вы должны использовать:
(?<=').*$
В основном это говорит мне, что все символы, следующие за char, до конца строки.
Изменить. Было отмечено, что $является неявным при использовании. * и, следовательно, строго не требуется, поэтому шаблон:
'.*
является технически корректным, однако более яснее быть конкретным и избегать путаницы для последующего обслуживания кода, поэтому мое использование $. Я считаю, что всегда лучше объявлять явное поведение, чем полагаться на неявное поведение в ситуациях, когда ясность может быть поставлена под сомнение.
'.*$
Начиная с одной кавычки ('
), сопоставляйте любой символ (.
) ноль или более (*
) до конца строки ($
).
Когда я пытался ". * в windows (Notepad ++), он совпадал бы со всеми после первого" до конца последней строки ".
Чтобы захватить все до конца этой строки, я набрал следующее:
'.*?\n
Это приведет только к захвату всего от "до конца этой строки".
Это будет захватывать все до "в обратном направлении 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
В вашем примере я бы пошел по следующему шаблону:
'([^\n]+)$
используйте многострочные и глобальные параметры для соответствия всем вхождениям.
Чтобы включить перевод строки в совпадение, вы можете использовать:
'[^\n]+\n
Но это может пропустить последнюю строку, если у нее нет перевода строки.
Для одной строки, если вам не нужно соответствовать линии, я бы предпочел использовать:
'[^$]+$