我正在尝试提取美元值之间的文本 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
\h
匹配 horizontal white-space\K
resets beginning所报告的比赛\R
匹配任何换行符序列
See demo at regex101 (PCRE 模式)。
此变体捕获两个部分,检查中间部分并接受任何行开头。
/^(\$\d{1,3}\.\d{1,2})(?:\h*\R((?:^.+\R)+?)(?=(?1)))?/m
(?1)
是 subroutine call到第一组的模式进行检查。
See another demo at regex101 (PCRE 模式也是如此)。