Regex查找$sign之间的文本块

Regex查找$sign之间的文本块,regex,regex-lookarounds,regex-group,Regex,Regex Lookarounds,Regex Group,我试图在一个美元值之间提取文本块。例如,对于以下文本: $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个街区 区块1应具有: 1 0000 0000 Some Text1 some Text1 区块2应具有: 123A Some

我试图在一个美元值之间提取文本块。例如,对于以下文本:

$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个街区

区块1应具有:

1  
0000  
0000  
Some Text1  
some Text1  
区块2应具有:

123A  
Some Text 2  
块3应具有

000  
Some Text 3  
下面是我写的正则表达式:

(\$[0-9]{1,3}\;[0-9]{1,2})(?Text.*?)(\$[0-9]{1,3}\;[0-9]{1,2})

正在返回我的区块1和区块3。我怎样才能得到block2呢


是否也可以获得即时文本块

您可以将最后一个捕获组转换为正向前瞻,并添加一个与字符串结尾匹配的替代项:

(\$[0-9]{1,3}\.[0-9]{1,2})\s*(?<Text>.*?)(?=\$[0-9]{1,3}\.[0-9]{1,2}|$)
                                         ^^^                        ^^ 
(\$[0-9]{1,3}.[0-9]{1,2})\s*(?.*)(=\$[0-9]{1,3}.[0-9]{1,2}.$)
^^^                        ^^ 

(?=\$[0-9]{1,3}.[0-9]{1,2}}$)
正向前瞻需要
\$[0-9]{1,3}.[0-9]{1,2}
$
,一到三位,
,一位或两位)或(

字符串结尾(
$
)立即显示在当前位置的右侧。

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

/^\$\d{1,3}\.\d{1,2}\h*\R\K(?:^[^$].+\R)+/m
  • \h
  • 报告的匹配项的
    \K
  • \R
    匹配任何换行符序列
(PCRE模式)


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

/^(\$\d{1,3}\.\d{1,2})(?:\h*\R((?:^.+\R)+?)(?=(?1)))?/m
  • (?1)
    是第一组的to模式,用于在之间进行检查

(还有PCRE图案)。

非常感谢,这就是我要找的。