我有6个数字的文本,通常存储在一行中。
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在它上运行得很好:
\n[0-9,.-]* [0-9,.-]* [0-9,.-]* [0-9,.-]* [0-9,.-]* [0-9,.-]*\n我注意到每隔一段时间我就会收到这样的消息:
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} 请告诉我是否有更好的方法
发布于 2015-10-10 17:08:14
一种方法是精确地表示数字的构成,所以在您的例子中,[-+]?[0-9]+[0-9,]*(?:\.[0-9]+)?可以做到这一点。这很有帮助,因为搜索可以知道一个数字何时开始,何时结束(因为有这样的规则:一个符号总是在开头,一个点不能多次出现,等等)。然后,您希望匹配由新行或空格分隔的六对,因此将其包装在捕获组中,并将其限制为6:(...[ \n]*){6,6}。这很有帮助,因为regex引擎可以通过回溯通过知道应该匹配多少个数字来计算数字。然后你想让新的行在几乎所有的位置,所以把新的行在每个字符组。您也可能希望将数字锚定在两边,但这是不必要的,因为regex引擎现在将尝试识别6个数字的有效元组。最终结果是:
SomeData\n([-+]?[0-9\n]+[0-9,\n]*(?:\.[0-9\n]+)?[ \n]){6,6}SomeData这将找到元组的6个数字,无论进入哪里。下面是一个例子:https://regex101.com/r/jD5nT8/1
https://stackoverflow.com/questions/33055305
复制相似问题