Regex - Выбрать шаблон в строке - PullRequest
2 голосов
/ 17 февраля 2020

Я новичок в Regex и сталкиваюсь со сложным!

Я хочу выбрать ТОЛЬКО сумму + валюту из следующего элемента списка.

Например: 150,00 евро - 100 , 00 Весы ЭСТЕРЛИНА и др. c.

Monto: 150,00 EURO
Monto: 7.350,00 PESO URUGUAY | Pesos: 12.495,00 |Sucursal: 36| 
Monto: 2.500,00 PESO URUGUAY 
Monto: 200,00 U$S EEUU | Pesos: 12.550,00 
Monto: 50,00 U$S EEUU 
Monto: 700,00 REAL | Pesos: 10.500,00 | Sucursal: 101 
Monto: 100,00 LIBRA ESTERLINA | Pesos: 8.500,00 | Sucursal: 12
Monto: 5.000,00 PESO CHILENO | Pesos: 400,00 | Sucursal: 101

Мой тест на регулярные выражения: https://regex101.com/r/R5Edrk/2

[0-9,.].+(Euro|URUGUAY|EEUU|CHILENO|ESTERLINA|REAL)

Я пробовал различные комбинации и формулы, но не смог выделить сумму + валюту. Я также попытался выделить все строки, пока не будет границы "|" (первая вертикальная черта), но это не сработало ...

Любая помощь и объяснения приветствуются, спасибо сообществу! :)

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Скорее, новичок в RegEx, но что насчет чего-то вдоль этих строк?

(?<=Monto:\s).*?(?=\s\||$)
  • (?<=Monto:\s) - Отрицательный LookBehind для установки начальной позиции после Monto:
  • .*? - любой символ, который возможен столько раз, но ленивый (останавливается при совпадении)
  • (?=\s\||$) - Положительный LookAhead для любого \s (пробел), за которым следует буквальный символ канала или конец строки.
1 голос
/ 18 февраля 2020

Вы можете сделать шаблон более точным c, комбинируя сумму и валюту в чередовании .

\b[0-9]+(?:[.,][0-9]+)*[ \t]+(?:Euro|PESO URUGUAY|U\$S EEUU|REAL|LIBRA ESTERLINA|PESO CHILENO)
  • \b Граница слова, чтобы предотвратить слово, являющееся частью более длинного слова
  • [0-9]+ Совпадение с 1+ цифрами
  • (?:[.,][0-9]+)* Повторение 0+ раз для совпадения с точкой или запятой и 1+ цифрами
  • [ \t]+ Совпадение с 1+ пробелами или табуляциями
  • (?: Невозвратная группа для сопоставления с одной из альтернатив
    • Euro|PESO URUGUAY|U\$S EEUU|REAL|LIBRA ESTERLINA|PESO CHILENO
  • ) Закрыть группу без захвата

Regex demo

Документация о re2 состояниях To match a metacharacter, escape it with a backslash

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

...