首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用不连续行符从文本中提取数字

用不连续行符从文本中提取数字
EN

Stack Overflow用户
提问于 2015-10-10 14:53:16
回答 1查看 44关注 0票数 1

我有6个数字的文本,通常存储在一行中。

代码语言:javascript
复制
SomeData\n0.00 0.00 0.00 31,570.07 0.00 31,570.07\nSomeData
SomeData\n0.00 0.00 0.00 485,007.24 0.00 485,007.24\nSomeData

这个regex在它上运行得很好:

代码语言:javascript
复制
\n[0-9,.-]* [0-9,.-]* [0-9,.-]* [0-9,.-]* [0-9,.-]* [0-9,.-]*\n

我注意到每隔一段时间我就会收到这样的消息:

代码语言:javascript
复制
SomeData\n0.00 0.00 10,921,594\n.89\n-\n9,563,271.0\n6\n0.00 1,358,323.83\nSomeData

请注意行符是如何在符号后或数字之间随机插入的,就像系统存储值而不过滤换行符一样。

我在努力把这个取出来。我尝试了各种表达式,但我更成功的表达式是0-9,.\n {0,1} 0-9,.- {0,1}匹配单个数字。

我可以用什么表达式来匹配数字格式的两个变体,最好已经去掉了不不变的换行符?

更新: -\n{0,2}0-9,+\n-9{3,4}\n {0,1} 请告诉我是否有更好的方法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-10 17:08:14

一种方法是精确地表示数字的构成,所以在您的例子中,[-+]?[0-9]+[0-9,]*(?:\.[0-9]+)?可以做到这一点。这很有帮助,因为搜索可以知道一个数字何时开始,何时结束(因为有这样的规则:一个符号总是在开头,一个点不能多次出现,等等)。然后,您希望匹配由新行或空格分隔的六对,因此将其包装在捕获组中,并将其限制为6:(...[ \n]*){6,6}。这很有帮助,因为regex引擎可以通过回溯通过知道应该匹配多少个数字来计算数字。然后你想让新的行在几乎所有的位置,所以把新的行在每个字符组。您也可能希望将数字锚定在两边,但这是不必要的,因为regex引擎现在将尝试识别6个数字的有效元组。最终结果是:

代码语言:javascript
复制
SomeData\n([-+]?[0-9\n]+[0-9,\n]*(?:\.[0-9\n]+)?[ \n]){6,6}SomeData

这将找到元组的6个数字,无论进入哪里。下面是一个例子:https://regex101.com/r/jD5nT8/1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33055305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档