r-如何在可能包含可变字符的模式上应用回溯正则表达式



我需要收集以下字符串中的两个值36.1225.40

9.17%的原始折扣(折扣金额:36.12美元(和36.12%的无关联折扣(折扣总额:25.40美元(,15天内交付

注意,两个量前面都有相同的字符串amount with discount: USD,所需值的标签是original discountnegociated 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组:negociatedoriginal,然后是一个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在线演示

最新更新