我有多种格式的字符串,必须从中准确提取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,
答案 0 :(得分:2)
要匹配这些数字(包括具有10位数字或4个空格,3个空格3的格式),您可以对捕获组使用反向引用\1
,该捕获组将匹配可选的空格。
用单词边界\b
围绕模式,以防止数字成为大单词的一部分。
\b\d{4}( ?)\d{3}\1\d{3}\b
答案 1 :(得分:1)
添加单词边界\b
会有所帮助。正则表达式变为:(\b([0-9]{10}|[0-9\s]{12})\b)
。
答案 2 :(得分:1)
您的表达式似乎很好,只是缺少单词边界,我们可能需要修改第二个格,以防万一:
\b([0-9]{10}|[0-9]{4}\s[0-9]{3}\s[0-9]{3})\b
如果您感兴趣,请在此demo中对表达式进行说明。