Регулярное выражение для выбора слова по крайней мере с двумя подчеркиваниями - PullRequest
1 голос
/ 22 сентября 2019

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

Я искал совпадение с регулярным выражением, но в настоящий момент не могу.

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

Я получил до

([a-zA-Z]+(?:_{2,}[a-zA-Z]+)*)

Примеры правильного соответствия:

VOK17_05_530_526002 *(has atleast than two underscores)*
VIE_ROMS_002 *(has atleast than two underscores)*
VOK_OVSZ_001/002 *(has atleast  two underscores and a forward slash + three digits)*

Пример ввода

VOK17_05_530_526002 502 504 BACU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002
VOK17_05_530_526002 401 401 LGCU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002
VOK17_05_530_526002 510 513 BACU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002
VOK17_05_530_526002 515 515 BACU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002
VOK17_05_530_526003 503 506 BACU VIE_ROMS_002 VIE_ROMS_001 VOK_OVSZ_001/002

Я пробую свое регулярное выражение @ https://regex101.com/r/yToVtc/1

Если кто-то может помочь здесь, я был бы признателен.

Ответы [ 5 ]

1 голос
/ 22 сентября 2019

Используйте это:

\b[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+){2,}(?:/\d{3})?\b

Объяснение:

\b                  # word boundary
[a-zA-Z0-9]+        # 1 or more alphanum
(?:                 # non capture group
  _                 # underscore
  [a-zA-Z0-9]+      # 1 or more alphanum
){2,}               # end group, must appear 2 or more times
(?:                 # non capture group
  /                 # a slask
  \d{3}             # 3 digits
)?                  # end group, optional
\b                  # word boundary

демо

1 голос
/ 22 сентября 2019

Вы можете использовать

\b[A-Za-z0-9]+(?:_[a-zA-Z0-9]+)+(?:_[0-9]{3,})+(?:_[a-zA-Z0-9]+)*(?:/[0-9]+)?\b

По частям

  • \b Граница слова
  • [A-Za-z0-9]+ Соответствовать 1+ раз любому из перечисленных
  • (?:_[a-zA-Z0-9]+)+ Повторите 1+ раз подчеркивание и 1+ любое из перечисленных
  • (?:_[0-9]{3,})+ Совпадение хотя бы со вторым подчеркиванием и 3 или более цифрами
  • (?:_[a-zA-Z0-9]+)*Повторите 0+ раз с подчеркиванием и любым из перечисленных
  • (?:/[0-9]+)? Соответствуйте необязательным / и 1+ цифрам
  • \b Граница слова

Regex demo

0 голосов
/ 22 сентября 2019

Регулярное выражение, приведенное ниже, использует упреждающее утверждение для упрощения вопросов:

\b(?=(?:([A-Za-z0-9]*_){2}))[A-Za-z0-9_]+(?:\/\d{3,})?\b
  1. \b(?=(?:([A-Za-z0-9]*_){2})) Соответствует границе слова, если и только если за ней следует ([A-Za-z0-9]*_){2},то есть строка, которая содержит 0 или более допустимых буквенно-цифровых символов, за которыми следует '_', все повторяются дважды.Это предварительное утверждение, гарантирующее, что наше совпадение на шаге 2 содержит как минимум два символа подчеркивания.
  2. [A-Za-z0-9_]+ Соответствует допустимым символам один или несколько раз.
  3. (?:\/\d{3,})? Необязательный форвардкосая черта, за которой следуют 3 или более цифр.
  4. \b Соответствует границе слова.

См. демонстрацию

0 голосов
/ 22 сентября 2019

([^\s]*_[^\s]*){2,} будет соответствовать любому слову (любая строка без пробела), содержащему по крайней мере два подчеркивания, путем нахождения двух последовательных групп любого числа не пробелов, символов подчеркивания и, тем не менее, многих символов «слово».

Вы можете заменить [^\s] любым определением слова, которое вам нравится.

Вы также можете добавить ?: после первой скобки, чтобы избежать захвата групп.

0 голосов
/ 22 сентября 2019

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

^[^_]*_[^_]*_.*$
  • ^ - начало совпадения
  • [^_]* Затем ноль до любого количества символов, которыене подчеркивание
  • _ затем подчеркивание
  • [^_]* затем ноль на любое количество символов, не являющихся подчеркиванием
  • _ затем подчеркивание
  • .* Затем ноль на любое количество символов
  • $ - Конец матча
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...