2016-06-14 84 views
-1

我想用java的string.replaceAll()replaceFirst()方法来编辑从pdf文档读取的数据。数据的线可能被返回是:正则表达式,删除除了数字以外的所有东西

21/1 ** E(6-11)4479 77000327633(U)

我希望只存储77000327633到一个变量与工作和寻找正确的正则表达式将只捕获这11位数字。我试图寻找一个正则表达式,但似乎没有给我所期望的结果。

+0

的内容取代一切总是结构相同?你到底尝试了哪种表情?如果可以提供一个匹配数字的表达式,则可以在捕获组中包装数字部分,并在'replaceAll()'中使用反向引用。 ' “yourstring” .replaceAll( “前缀(数字)的后缀”, “$ 1”)'。 – Thomas

+0

如果你知道这个数字总是大约11位数字,你可以简单地使用这个正则表达式(\ d {5,11}),你可以在这里测试https://regex101.com/r/kT3rR0/1 –

+1

什么是规则选择数字?字符串中的最后一个数字?字符串中最大的数字?任何超过四位数的数字?字符串中的第四个非空格项?什么? –

回答

0

这是可以做到这样的:

String value = "21/1**E (6-11) 4479 77000327633 (U)"; 
Pattern pattern = Pattern.compile(".* (\\d{11}) .*"); 
System.out.println(pattern.matcher(value).replaceAll("$1")); 

输出:

77000327633 

注意:这假定你的号码有11位数字,前后有空格。

NB2:这并不意味着是完美的它只是显示这个想法是在这里定义一个全局模式与组和组

0

这是它:(.*)[ ]([0-9])*[ ](.*)

可以通过访问你的价值$ 2

+0

看起来像你放错了量词。 –

+0

你是什么意思? – CZ54

相关问题