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

Есть ли способ сопоставить такой шаблон в строке?

Шаблон (без учета регистра): "\bfactuur(nummer)" **OR** "Nr." **OR** "Nr(:)", за которым следует фактическое значение "\d+" ИЛИ "d{3,4} - d{3,4}".

Приятно иметь (если это на самом деле не сюрреалистично): "Factuur\n" игнорировать все, что между "Nr." "\d+".

Проверено на:

Factuur: 2018-4005 

Factuur

Nr. 90424571 

 Factuurnummer: 2019-010

 factuur : 281319261

factuurnummer: 63

Factuurnummer: 281319264565

Factuur assdg 236373

   Factuurnummer 281319265

Factuurnummer 0723 - 1345

Factuur nr. 180262

Factuurnummer : 6322232

DEMO Regex:

https://regex101.com/r/PuGrqn/37

1 Ответ

0 голосов
/ 21 марта 2019

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

\bfactuur(?:nummer|\n)?.*?(?<=\s)(\d+(?:\s*-\s*\d+)?)(?=\s|$)

Проверьте онлайн демо

Вот два изменения, которые я сделал,

  • Если за фактууром сразу же следует новая строка, кроме nummer, просто чередуйте \n с nummer
  • Увеличьте (\d+) до (\d+(?:\s*-\s*\d+)?), чтобы разрешить ему не только сопоставлять числа, но также и необязательно совпадать с некоторыми необязательными пробелами, затем с дефисом, затем снова с некоторым необязательным пробелом, наконец, с последующим числом, поэтому я добавил (?:\s*-\s*\d+)? после \d+

Надеюсь, это решит проблемы. Дайте мне знать, если у вас есть еще образцы, которые не совпадают.

Редактировать: Для захвата строки, подобной этой

Factuurnummer Factuurdate 1234 3-21-2019

Шаблон может быть улучшен для захвата нескольких чисел, разделенных пробелом или дефисом, используя это регулярное выражение,

\bfactuur(?:nummer|\n)?.*?(?<=\s)(\d+(?:\s*-?\s*\d+)*)(?=\s|$)

Проверьте эту демонстрацию с дополнительными образцами данных

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