正则表达式查找 $ 符号之间的文本块
Regex to find blocks of text between $ sign
我正在尝试提取美元价值之间的文本块。例如下面的文字:
.33
1
0000
0000
Some Text 1 line1
Some Text 1 line2
[=10=].00
123A
some Text 2
.34
000
some text 3
.33
我想让我的正则表达式得到 3 个方块。
block1 应该有:
1
0000
0000
Some Text1
some Text1
block2 应该有:
123A
Some Text 2
block3 应该有
000
Some Text 3
下面是我写的正则表达式:
($[0-9]{1,3}\.[0-9]{1,2})(?<Text>.*?)($[0-9]{1,3}\.[0-9]{1,2})
regex 正在返回块 1 和块 3。我怎样才能得到块 2?
是否也可以获取即时文本块?
您可以将最后一个捕获组转换为正先行并添加一个替代项以匹配字符串结尾:
($[0-9]{1,3}\.[0-9]{1,2})\s*(?<Text>.*?)(?=$[0-9]{1,3}\.[0-9]{1,2}|$)
^^^ ^^
参见regex demo。
(?=$[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
匹配 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 模式也是如此)。
我正在尝试提取美元价值之间的文本块。例如下面的文字:
.33
1
0000
0000
Some Text 1 line1
Some Text 1 line2
[=10=].00
123A
some Text 2
.34
000
some text 3
.33
我想让我的正则表达式得到 3 个方块。
block1 应该有:
1
0000
0000
Some Text1
some Text1
block2 应该有:
123A
Some Text 2
block3 应该有
000
Some Text 3
下面是我写的正则表达式:
($[0-9]{1,3}\.[0-9]{1,2})(?<Text>.*?)($[0-9]{1,3}\.[0-9]{1,2})
regex 正在返回块 1 和块 3。我怎样才能得到块 2?
是否也可以获取即时文本块?
您可以将最后一个捕获组转换为正先行并添加一个替代项以匹配字符串结尾:
($[0-9]{1,3}\.[0-9]{1,2})\s*(?<Text>.*?)(?=$[0-9]{1,3}\.[0-9]{1,2}|$)
^^^ ^^
参见regex demo。
(?=$[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
匹配 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 模式也是如此)。