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
此变体捕获这两个部分,检查中间部分,并接受任何行开始
/^(\$\d{1,3}\.\d{1,2})(?:\h*\R((?:^.+\R)+?)(?=(?1)))?/m
是第一组的to模式,用于在之间进行检查(?1)
(还有PCRE图案)。非常感谢,这就是我要找的。