Regex 如何使用正则表达式提取两行之间的相关文本

Regex 如何使用正则表达式提取两行之间的相关文本,regex,r,regex-negation,regex-lookarounds,regex-greedy,Regex,R,Regex Negation,Regex Lookarounds,Regex Greedy,这里我想提取115.00卢比,并注意到重量0.25公斤是可变的 我正在努力 \b.*\n\K.*(=\n*\n) 但它给了我“115.00卢比”和“朱姆拉”: 文本中有多个Rp条目用于eg Rp 10、Rp 400,但我只想提取“Berat”和“Jumlah”之间的条目。这些数字也是可变的 PS-我正在寻找使用正则表达式的解决方案 我只想提取115.000卢比 您可以将gsub与(?s)。*(Rp\\s+\\d+\\\.\\d+).*.regex一起使用,从文本中提取它: Berat: 0.25

这里我想提取115.00卢比,并注意到重量0.25公斤是可变的

我正在努力

\b.*\n\K.*(=\n*\n)

但它给了我“115.00卢比”和“朱姆拉”: 文本中有多个Rp条目用于eg Rp 10、Rp 400,但我只想提取“Berat”和“Jumlah”之间的条目。这些数字也是可变的 PS-我正在寻找使用正则表达式的解决方案


我只想提取115.000卢比

您可以将
gsub
(?s)。*(Rp\\s+\\d+\\\.\\d+).*.
regex一起使用,从文本中提取它:

Berat: 0.25kg
Rp 115.000
Jumlah:
Beli
Ke Dafta


*
将匹配任何符号(甚至是由于
(?s)
修饰符而产生的换行符),并且
Rp\\s+\\d+\\.\\d+
将匹配模式Rp+空格+数字+。+编号。

相关文本和无关文本之间的区别尚不清楚。您用来匹配文本的基本规则是什么?我只想提取Rp 115.000,如果这些是行,而不是单个字符串
v1
^Rp\s.*$
,并在匹配
Rp 115.000
上使用多行选项,但这取决于它自己的一行。根据@Stribizev的回答,如果您特别想要在Berat之后和Jumlah之前的Rp,您可以尝试
gsub((?).*Berat[^\n]*\n(Rp\\s+\\d+\\.\\d+\nJumlah.*”,“\\1”,s,perl=T)
。这假设Rp之前没有空格
gsub("(?s).*(Rp\\s+\\d+\\.\\d+).*", "\\1", s, perl=T)
##[1] "Rp 115.000"