正则表达式,用于从字符串中准确提取10位数字

时间:2019-06-26 15:43:31

标签: regex

我有多种格式的字符串,必须从中准确提取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 个答案:

答案 0 :(得分:2)

要匹配这些数字(包括具有10位数字或4个空格,3个空格3的格式),您可以对捕获组使用反向引用\1,该捕获组将匹配可选的空格。

用单词边界\b围绕模式,以防止数字成为大单词的一部分。

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

Regex demo

答案 1 :(得分:1)

添加单词边界\b会有所帮助。正则表达式变为:(\b([0-9]{10}|[0-9\s]{12})\b)

在这里https://regex101.com/r/6Hm8PD/2

检查

答案 2 :(得分:1)

您的表达式似乎很好,只是缺少单词边界,我们可能需要修改第二个格,以防万一:

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

如果您感兴趣,请在此demo中对表达式进行说明。