Regex Expression Non Capturing Group - PullRequest
       1

Regex Expression Non Capturing Group

0 голосов
/ 08 апреля 2019

Я пытаюсь зачитать сумму в счете.
Рассматриваемая строка (есть еще несколько строк, которые включают €, но не слово «Итого») выглядит следующим образом:
Всего € 31,73
Я хочу, чтобы в моем полном совпадении были только цифры (включаяточка), а не символ € прямо перед ним.

То, что я пробовал, - это группа без захвата за €, но мое полное совпадение все еще включает ее.

Это выражение, которое я пробовал:

(?<=Total)(?:[\s€]*)((((\d+)[,.]{1,10})+\d{0,2})|(\d+(?!,)))

1 Ответ

1 голос
/ 08 апреля 2019

Попробуйте следующий шаблон регулярных выражений:

Total\s+(?:€\s)?(\d{1,3}(?:,\d{3})*(?:\.\d+)?)

Общая сумма будет присутствовать в первой группе захвата.

Демо

Вот краткое объяснение регулярного выражения:

Total\s+         match "Total" followed by one or more spaces
(?:€\s)?         match an optional Euro sign, followed by a space
(                capture
    \d{1,3}      match one to three digits
    (?:,\d{3})*  followed by zero or more thousands groups
    (?:\.\d+)?   followed by an optional decimal component
)                stop capture

Edit:

Если вы хотите шаблон, полное совпадение которого является только числовой частью, попробуйте использовать это:

(?:(?<=Total )|(?<=Total € ))\d{1,3}(?:,\d{3})*(?:\.\d+)?

Демо

Это означает, что на первом месте стоит либо Total, либо Total €, а затем номер. Обратите внимание, что не на самом деле соответствует префиксу, но соответствует только номеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...