如何用多位数和有或没有逗号来捕捉数字?

时间:2018-05-27 23:35:13

标签: regex

我的正则表达式here
.*Previous Balance.* (?<prev_balance>\d+)

我的数据:

 Security
Code
Issuer/Security Date Reference Transaction Type Quantity Balance at
04 May 2018
SMARTSHARES ETF
APA ASIA PACIFIC - Price at 30/04/2018
$2.09242
Previous Balance 0
03/05/2018 0000000000 Investor Application 2,389 2,389
SMARTSHARES ETF
ASD AUS DIVIDEND - Price at 30/04/2018
$1.64378
Previous Balance 982
03/05/2018 0000000000 Regular Savings Plan 30 1,012
SMARTSHARES ETF
ASR AUS RESOURCES - Price at
30/04/2018 $4.58275
Previous Balance 0
03/05/2018 0000000000 Investor Application 1,091 1,091
SMARTSHARES ETF
DIV NZ DIVIDEND - Price at 30/04/2018
$1.08884
Previous Balance 1,440
03/05/2018 0000000000 Regular Savings Plan 46 1,486
SMARTSHARES ETF
EMF EMERGING MARKETS - Price at
30/04/2018 $1.30309
Previous Balance 0
03/05/2018 0000000000 Investor Application 7,674 7,674
SMARTSHARES ETF
EUF EUROPE - Price at 30/04/2018
$1.69312
Previous Balance 0
03/05/2018 0000000000 Investor Application 5,906 5,906
SMARTSHARES ETF
TWF TOTAL WORLD - Price at 30/04/2018
$2.11181
Previous Balance 0
03/05/2018 0000000000 Investor Application 2,367 2,367
SMARTSHARES ETF
USG US LARGE GROWTH - Price at
30/04/2018 $4.01132
Previous Balance 0

如何捕获982或1,440或0? 在1,440,似乎是我的麻烦。 我在考虑使用(a|b) Matches the a or the b part of the subexpression.,例如\d+|\d+,\d+但是我不能让它工作。可能我需要一些锚定?

注意:完成此建议的answer有助于解决此问题。 \d{1,3}
.*Previous Balance.* (?<prev_balance>[0-9]{1,3},[0-9]{1,3})这只能捕获1,440

3 个答案:

答案 0 :(得分:0)

这里:

^Previous Balance\s+((?:\d|,)+)

匹配0,982,0,1.440等group(1)。演示:link

有趣的部分包括:

  • \d匹配数字
  • |是 - 或
  • ,是逗号
  • (?: )将数字和逗号分组在一起
  • (?:\d|,)+表示:重复数字或逗号

或者,您可以将[ ]群组与\d,一起使用:

^Previous Balance\s*([\d,]+)

另一个demo

答案 1 :(得分:0)

这是一个非常可靠的正则表达式模式,用于将金额与可选逗号匹配:

^Previous Balance\s+\$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?$

Demo

如果您稍后发现小数点也是可选的,请使用:

^Previous Balance\s+\$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$

这匹配从0到99,999(以及可选的1-2个小数)的数量。

答案 2 :(得分:0)

要匹配9821,4400而不是1,等值,您可以在该行的开头匹配Previous Balance并捕获值你想在一个小组中匹配。

^Previous Balance\s*([0-9]+(?:,[0-9]+)?)$

<强>详情

  • ^断言该行开头的位置
  • Previous Balance\s*字面上匹配零个或多个空白字符\s*
  • (开始捕获群组(这将匹配并捕获您的值)
    • [0-9]+匹配一个或多个ditits
    • (?:,[0-9]+)?后跟一个与逗号和一个或多个数字相匹配的可选?非捕获组(?:
  • )关闭捕获组
  • $断言行尾的位置