Регулярное выражение для извлечения ровно 10 цифр из строки - PullRequest
2 голосов
/ 26 июня 2019

У меня есть несколько форматов строк, из которых я должен извлечь ровно 10-значное число.Я попробовал следующие регулярные выражения для этого.Но он извлекает первые 10 цифр из номера вместо того, чтобы игнорировать его.

([0-9]{10}|[0-9\s]{12})
([[:digit:]]{10})

Это форматы

Формат 1

KINDLY AUTH FOR FUNDS
ACC 1469007967   (Number needs to be extracted)
AMT R5 000
DD 15/5
FROM:006251

Формат 2

KINDLY AUTH FOR FUNDS
ACC 146900796723423  **(Want to ignore this number)**
AMT R5 000
AMT R30 000
DD 15/5
FROM:006251

Формат 3

PLEASE AUTH FUNDS
ACC NAME-PREMIER FISHING
ACC NUMBER -1186 057 378  **(the number after - sign needs to be extracted)**
CHQ NOS-7132 ,7133,7134
AMOUNTS-27 000,6500,20 000
THANKS
FROM:190708

Формат 4

 PLEASE AUTHORISE FOR FUNDS ON AC
 **1162792833** CHQ:104-R8856.00 AND       (The number in ** needs to be extracted)
 CHQ:105-R2772.00
 REGARDS,

Ответы [ 3 ]

2 голосов
/ 26 июня 2019

Чтобы сопоставить эти числа, включая форматы, с 10 цифрами или 4 пробелами 3 пробела 3, вы можете использовать обратную ссылку \1 к группе захвата, которая будет соответствовать необязательному пробелу.

Окружитьшаблон по границам слов \b, чтобы цифры не были частью большого слова.

\b\d{4}( ?)\d{3}\1\d{3}\b

Regex demo

1 голос
/ 26 июня 2019

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

\b([0-9]{10}|[0-9]{4}\s[0-9]{3}\s[0-9]{3})\b

В этом демо ,Выражение объясняется, если вам может быть интересно.

1 голос
/ 26 июня 2019

Добавление границы слова \b помогает. Регулярное выражение становится: (\b([0-9]{10}|[0-9\s]{12})\b).

Проверьте это здесь https://regex101.com/r/6Hm8PD/2

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