匹配第二个数字,如果第一个数字不存在

时间:2016-02-16 04:00:45

标签: javascript regex

我正在处理需要删除大文本数据的正则表达式。在运行正则表达式之前,我用一个空格替换所有空格,所有行,所以像这样的电子表格:

Something    50.00  10.00
Other Piece        100,00

成为这个:

Something 50.00  10.00 Other Piece 100,00

这个表具体来说,有4列,数量,名称,费用金额和总金额,这种方式:

01 Some Name  40,000  10.000
02 Some Name  40,000  10.000
03 Some Name  40,000  10.000

但有时,费用数额并不存在,只是总金额:

01有些名称10.000 01某些名称40,000 10.000

我只需要抓住总金额,所以我很难找到一个正则表达式来捕捉4值,如果3值存在的话。

我有多久了:

\b(?:228)\s.*?(?:[a-z]+)\s(?:[\d/.,]+)?\s([\d/.,]+)

如果存在3,则此RegExp捕获4号码,但当3号码不存在时,它将无法正常工作。所以,我想请求帮助。我怎样才能做到这一点?

我想做的是:

找到我定义的数字,如228,之后,找到名称,可以是一个或多个,如果1值存在则捕获2值,如果第二个没有&#39则捕获1值存在。

http://regexr.com/3cq7e

感谢!!!

更新 -

此外,我之前无法更改过程,因此我无法删除线条,空格等。我无法使用正则表达式:找到我定义的数字之后找到名称,然后找到下一个名称并捕获前一个值,因为有时下一个名称可能不存在。

感谢。

2 个答案:

答案 0 :(得分:0)

希望这会有所帮助:

\b(?:228)\s+(?:[A-Za-z ]+?)\s+(?:[\d]+[.,][\d]+\s+)?([\d]+[.,][\d]+)

这假设名称没有特殊字符或数字(它们只有A到Z或空格)。另一个假设是费用和总金额总是有句号或逗号,并且在句号或逗号之后也有数字。

答案 1 :(得分:0)

如果您使用支持多行的正则表达式并始终搜索最后十进制数,该怎么办?通过这种方式,无论存在什么,您都可以得到第4或第3个数字。

(\d+\.?\d+)$/gm

enter image description here

使用它here