我的正则表达式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
答案 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+)?$
如果您稍后发现小数点也是可选的,请使用:
^Previous Balance\s+\$?(([1-9]\d{0,2}(,\d{3})*)|\d+)?(\.\d{1,2})?$
这匹配从0到99,999(以及可选的1-2个小数)的数量。
答案 2 :(得分:0)
要匹配982
或1,440
或0
而不是1,
等值,您可以在该行的开头匹配Previous Balance
并捕获值你想在一个小组中匹配。
^Previous Balance\s*([0-9]+(?:,[0-9]+)?)$
<强>详情
^
断言该行开头的位置Previous Balance\s*
字面上匹配零个或多个空白字符\s*
(
开始捕获群组(这将匹配并捕获您的值)
[0-9]+
匹配一个或多个ditits (?:,[0-9]+)?
后跟一个与逗号和一个或多个数字相匹配的可选?
非捕获组(?:
)
关闭捕获组$
断言行尾的位置