我需要收集以下字符串中的两个值36.12
和25.40
:
9.17%的原始折扣(折扣金额:36.12美元(和36.12%的无关联折扣(折扣总额:25.40美元(,15天内交付
注意,两个量前面都有相同的字符串amount with discount: USD
,所需值的标签是original discount
和negociated discount
。
对于第一个所需值,我尝试了正确捕获9.17 % (amount with discount: USD 36.12)
的(?<=original discount of ).*)
,然后附加了((?<=amount with discount: USD).*)
(生成完整的正则表达式(?<=original discount of ).*)((?<=amount with discount: USD).*)
(以捕获36.12,但它不起作用(对于第二个所需的值,我也尝试了同样的方法,将original
更改为negotiated
(。
有什么线索吗?有没有更简单的方法?
您可以捕获所需的两个部分:
((?:negociated|original) discount).*?bUSDs*(d+(?:.d+)?)
查看regex演示
详细信息
((?:negociated|original) discount)
-第1组:negociated
或original
,然后是一个discount
字.*?
-换行字符以外的任何0+个字符,尽可能少bUSD
-一个完整的单词USD
s*
-0+空白(d+(?:.d+)?)
-第2组:1+位数字,后面跟着可选的.
和1+位序列
在Rstringr
中,可以使用提取这些值
x <- "original discount of 9.17 % (amount with discount: USD 36.12) and negociated discount of 36.12 % (amount with discount: USD 25.40), delivery in 15 days"
res <- stringr::str_match_all(x, "((?:negociated|original) discount).*?\bUSD\s*(\d+(?:\.\d+)?)")
lapply(res, function(z) z[,-1])
查看R在线演示