正则表达式从字符串中提取所有数字(不一定是连续的)

时间:2015-08-12 11:05:21

标签: regex

(冒号和句号,虽然我确定自己可以自行修改!)

从PDF中提取数据后,我有很多"合并"他们重叠的领域,例如

Joh1n5D:o2d4e.81

我想分成

John Doe
15:24.81

我有几百个这样的,所以我希望这可以用正则表达式 - 我觉得它应该是,但是我可以完全理解匹配字符串中的多个部分并返回他们连在一起?

([0-9\:\.])/g

Works,但是为每个字符返回单独的匹配,而不是一个字符串?

2 个答案:

答案 0 :(得分:2)

正则表达式将始终返回单独的匹配,因为这正是正则表达式的工作方式。此外,\d+|[:.]可能稍好一些,因为每组数字都在一起。

至于你的perdicament,你可以使用类似(\d+|[:.])|[\s\S]*?的东西,并在regex101上用$ 1替换,如this,添加的替换是去除所有其他角色(虽然,授予,它离开每个人都有一个空间,所以看起来很奇怪。

答案 1 :(得分:0)

另一个解决方案,但它会因语言而异,您可以使用两个正则表达式,例如:[\d:.][^\d:.][a-zA-Z][^a-zA-Z],然后使用功能以多种语言显示,例如replaceAll和正则表达式。在Java示例中:

String str = example.replaceAll("[\\d:.]", ""); // result: JohnDode
String time = example.replaceAll("[^\\d:.]", ""); // result: 15:24.81

两个操作,但不需要使用组等。