R从字符串的末尾提取第一个模式

时间:2018-08-20 21:50:10

标签: r regex

我想从字符串中提取大小,可以是:

a <- c("xxxxxxx 2.5 oz (23488)",
        "xxxxx /1.36oz",
        "xxxxx/7 days /20 ml")

我想要的结果:2.5 oz /1.36oz /20 ml

因为字符串不同,所以我想向后提取模式。也就是说,我想从字符串的末尾提取\\/*(\\d+\\.*\\d*)\\s*[[:alpha:]]+的第一个外观。这样可以避免R从第一个字符串中提取23488,从第三个字符串中提取/7 days

任何人都知道我如何实现这一目标? 谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用

> a <- c("xxxxxxx 2.5 oz (23488)",
+         "xxxxx /1.36oz",
+         "xxxxx/7 days /20 ml")
> regmatches(a, regexpr("/?\\d+(?:\\.\\d+)?\\s*\\p{L}+(?!.*\\d(?:\\.\\d+)?\\s*\\p{L}+)", a, perl=TRUE))
[1] "2.5 oz"  "/1.36oz" "/20 ml" 

请参见regex demo

详细信息

  • /?-可选的/
  • \\d+-1个以上数字
  • (?:\\.\\d+)?-可选的.和1个以上的数字序列
  • \\s*-超过0个空格
  • \\p{L}+-1个以上字母
  • (?!.*\\d(?:\\.\\d+)?\\s*\\p{L}+)-不跟随
    • .*-任意0个以上的字符,并且尽可能多
    • \\d-一个数字
    • (?:\\.\\d+)?-可选的.和1个以上的数字序列
    • \\s*-超过0个空格
    • \\p{L}+-1个以上字母

答案 1 :(得分:1)

如果您知道单位名称(盎司,毫升等),则可以尝试以下操作:

((\d*|\d*\.\d{0,2})\s?(ml|oz|etc))

请参见working example