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