Ваше регулярное выражение просто необходимо после двух изменений, чтобы оно работало для всех ваших образцов. Вы можете использовать это регулярное выражение,
\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|$)
Проверьте эту демонстрацию с дополнительными образцами данных