我正在尝试提取美元值之间的文本 block 。例如下面的文本:

$12.33   
1   
0000   
0000   
Some Text 1 line1   
Some Text 1 line2   
$0.00   
123A   
some Text 2   
$12.34   
000   
some text 3   
$90.33 

我希望我的正则表达式能为我提供 3 个区 block 。

block 1应该有:

1   
0000   
0000   
Some Text1   
some Text1   

block 2应该有:

123A   
Some Text 2   

block 3应该有

000   
Some Text 3   

下面是我写的正则表达式:

(\$[0-9]{1,3}\.[0-9]{1,2})(? <文本> .*?)(\$[0 -9]{1,3}\.[0-9]{1,2})

regex正在返回 block 1 和 block 3。我怎样才能也获得 block 2?

是否也可以获取立即的文本 block ?

请您参考如下方法:

如果其他行在行首不包含 $ ,则仅提取数字行之后的部分。它不会检查两个 $ 数字行之间是否匹配。

/^\$\d{1,3}\.\d{1,2}\h*\R\K(?:^[^$].+\R)+/m 

See demo at regex101 (PCRE 模式)。


此变体捕获两个部分,检查中间部分并接受任何行开头。

/^(\$\d{1,3}\.\d{1,2})(?:\h*\R((?:^.+\R)+?)(?=(?1)))?/m 

See another demo at regex101 (PCRE 模式也是如此)。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!