Хобрук: Ваш путь к мастерству в программировании

RegEx, список, разделенный двоеточием

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

Будут совпадать следующие...

somevalues  ;somevalues;       somevalues;

or

somevalues; somevalues             ;somevalues

Окончание ; не должно быть необходимо.

Следующее не будет соответствовать.

somevalues ;   some values    somevalues;

or

some values; somevalues some values

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

([a-zA-Z]*\s*\;?\s*)*

Соответствует следующее (что не должно e)

somevalue ; somevalues  some values;

Как сделать, чтобы выражение разрешало пробелы только при наличии ; слева или справа от него?

04.07.2010

  • ([a-zA-Z]*\s*\;?\s*)* будет рассматривать только первое двоеточие, если я не ошибаюсь, поэтому оно также соответствует второму. 04.07.2010
  • здесь вы можете узнать все, что вам нужно о регулярном выражении ‹strong› нажмите здесь ‹/strong› 05.07.2010

Ответы:


1

Следующее выражение PCRE должно работать.

\w+\s*(?:(?:;(?:\s*\w+\s*)?)+)?

Однако, если добавить регулярное выражение для проверки адреса электронной почты, потребуется заменить \w+ на (?:<your email validation regex>).

Вероятно, это именно то, что вам нужно, проверено на http://regexr.com?2rnce.

РЕДАКТИРОВАТЬ: Однако в зависимости от языка вы могли бы? нужно сбежать ; как \;

04.07.2010
  • Это именно то, что я ищу. Я использую String.Split в С#, но я хотел проверить текстовое поле на стороне клиента, прежде чем что-либо делать по соображениям производительности. 05.07.2010
  • Можете ли вы опубликовать окончательное регулярное выражение с проверкой адреса электронной почты ?? 05.07.2010

  • 2

    Почему бы просто не разделить точку с запятой, а затем регулярно использовать адреса электронной почты?

    04.07.2010
  • Если я не ошибаюсь, точка с запятой является допустимым символом в адресах электронной почты RFC822, поэтому вы должны быть осторожны при его использовании, чтобы электронные письма гарантированно не содержали точек с запятой. 04.07.2010
  • интересно - интересно, как мое мировоззрение справляется с этим. Я думаю, что RFC2822 заменил, но я тоже не читал его. 04.07.2010

  • 3

    Проблема исходит из ? в \;?

    [a-zA-Z]*(\s*;\s*[a-zA-Z]*)*
    

    должно сработать.

    04.07.2010

    4

    Пытаться

    ([a-zA-Z]+\s*;\s*)*([a-zA-Z]+\s*\)?
    

    Обратите внимание, что я изменил * на + в шаблоне электронной почты, поскольку я предполагаю, что вы не хотите, чтобы строки, подобные ;, совпадали.

    04.07.2010

    5

    чтобы решить эту проблему с помощью регулярного выражения, вы должны добавить + добавить разделитель к своим строкам ввода, иначе вы не сможете легко определить первый и последний элемент

    #!/bin/bash
    
    input=a:aa:aaa:aaaa
    needle=aa
    if [[ ":$input:" =~ ":$needle:" ]]
    then
      echo found
    else
      echo not found
    fi
    # -> found
    

    .. это занимает 45 наносекунд

    bash globbing быстрее с 35 наносекундами

    input=a:aa:aaa:aaaa
    needle=aa
    if [[ ":$input:" == *":$needle:"* ]]
    then
      echo found
    else
      echo not found
    fi
    # -> found
    

    глупое решение: разделить по разделителю и сопоставить целые строки. этот действительно медленный, с 5100 наносекундами

    echo a:aa:aaa:aaaa | tr ':' $'\n' | grep "^aa$"
    # -> aa
    
    07.10.2020
    Новые материалы

    Как я могу подписаться на тему изображений в ROS Matlab и получить изображение RGB?
    Привет, Пожалуйста, как я могу извлечь изображение из сообщения ROS Image, за которым следует imshow? Я уже подписался на правильную тему, но message.getData() дает мне объект..

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..