Arhn - архитектура программирования

Необязательное совпадение двоеточия в конце строк с регулярным выражением

Я пытаюсь создать регулярное выражение для извлечения всей строки от начала до конца строки, кроме двоеточия (:) в конце строки.

Строки:

ORA-06550: line 10, column 33:
ORA-20000: Schema "TEST" does not exist or insufficient privileges
PLS-00201: identifier 'A' must be declared:

В одном регулярном выражении на языке Perl я хочу зафиксировать следующие строки:

ORA-06550: line 10, column 33
ORA-20000: Schema "TEST" does not exist or insufficient privileges
PLS-00201: identifier 'A' must be declared

На данный момент у меня есть следующее регулярное выражение (см. онлайн):

/^(.*)(?::)?$/gm

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

20.08.2014

Ответы:


1

Вы можете использовать это нежадное регулярное выражение:

/^(.*?):?$/gm

Демо RegEx

20.08.2014
  • Нет необходимости использовать ленивый квантификатор. Это очень медленно и ненужно. 20.08.2014
  • Не это ^.+(?<!:$) 20.08.2014

  • 2

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

    $str =~ s/:$//;
    
    20.08.2014

    3

    Самое простое регулярное выражение, о котором я могу думать, это

       /(.+):$/
    

    Итак, чтобы отредактировать буфер на месте:

      $buffer =~ s/(.+):$/$1/;
    

    Но вы также можете рассмотреть:

       chop $buffer if $buffer =~ /:$/;
    

    который ищет завершающее двоеточие и отсекает его при обнаружении.

    20.08.2014
  • Я думаю, что у него есть возможные линии без двоеточия. 20.08.2014
  • Отсюда и решение «если и нарезать». Не для каждого решения требуется оператор s/// со сложным регулярным выражением с модификатором просмотра нулевой ширины. Достаточно некоторого времени и если/тогда и понятнее. На самом деле, «отрезать, если заканчивается двоеточием» не только более понятно, но и фактически читается как цель кода. 20.08.2014

  • 4

    Попробуй это.

    use warnings;
    use strict;
    @data = <DATA>;
    @remove = grep{s/(:$)?//g} @data;
    print "@remove\n";
    
    __DATA__
    ORA-06550: line 10, column 33:
    ORA-20000: Schema "TEST" does not exist or insufficient privileges
    PLS-00201: identifier 'A' must be declared:
    

    Этот фрагмент кода удаляет : из ваших данных. Я добавил ?, чтобы соответствовать предыдущему символу 0 или 1 раз.

    20.08.2014

    5

    Это самый быстрый и простой способ сделать это

    /^.+(?<!:$)/mg
    
    20.08.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..