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

R从字符串末尾提取第一个模式,r,regex,R,Regex,我想从字符串中提取大小,可以是: a <- c("xxxxxxx 2.5 oz (23488)", "xxxxx /1.36oz", "xxxxx/7 days /20 ml") a您可以使用 > a <- c("xxxxxxx 2.5 oz (23488)", + "xxxxx /1.36oz", + "xxxxx/7 days /20 ml") > regmatches(a, regexpr("/?\\

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

a <- c("xxxxxxx 2.5 oz (23488)",
        "xxxxx /1.36oz",
        "xxxxx/7 days /20 ml")
a您可以使用

> 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" 
>a regexpr匹配(a,regexpr(“/?\\d+(?:\\\.\\d+)\\s*\\p{L}+(?!.\\d(?:\\.\\d+)\\s*\\p{L}+”,a,perl=TRUE))
[1] “2.5盎司”“/1.36盎司”“/20毫升”

详细信息

  • /?
    -可选的
    /
  • \\d+
    -1+位
  • (?:\\.\\d+)
    -可选的
    和1+数字序列
  • \\s*
    -0+空格
  • \\p{L}+
    -1个以上字母
  • (?!.\\d(?:\\.\\d+)\\s*\\p{L}+
    -后面不跟
    • *
      -任何0+字符,尽可能多
    • \\d
      -一个数字
    • (?:\\.\\d+)
      -可选的
      和1+数字序列
    • \\s*
      -0+空格
    • \\p{L}+
      -1个以上字母
您可以使用

> 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" 
>a regexpr匹配(a,regexpr(“/?\\d+(?:\\\.\\d+)\\s*\\p{L}+(?!.\\d(?:\\.\\d+)\\s*\\p{L}+”,a,perl=TRUE))
[1] “2.5盎司”“/1.36盎司”“/20毫升”

详细信息

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

如果您知道这些单位的名称(盎司、毫升等),您可以尝试以下方法:

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


请参阅。

如果您知道这些单位的名称(盎司、毫升等),您可以尝试以下方法:

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


请参阅。

一个想法是在消费之前放置
*
。像这样的东西,它不会捕获所有大小的东西吗?@Mr369是的,它会。有关您要查找的结果,请参阅捕获组1@emsimpson92您更改了正则表达式,但它现在不匹配,比如说,
40L
。@Mr369未捕获组:(with
perl=true
)。一个想法是在消费之前放置
*
。像这样的东西,它不会捕获所有大小的东西吗?@Mr369是的,它会。有关您要查找的结果,请参阅捕获组1@emsimpson92您更改了正则表达式,但它现在不匹配,比如说,
40l
。@Mr369,但不捕获组:(with
perl=true
)。仅供参考:这需要了解所有测量单位。仅供参考:这需要了解所有测量单位。非常感谢您的回答!如果字符串是
“xxxxx 08/21/1.38 Oz xxx 08/21/18 xxx 08/21/18”
,情况如何?使用regexp将产生
18xxx
。@Mr369那么,根据您的规格,您最好提取所有匹配项,然后只抓取最后出现的项,请参阅。非常感谢您的回答!如果字符串是
“xxxxx 08/21/1.38 Oz xxx 08/21/18 xxx 08/21/18”
,情况如何?使用regexp将产生
18xxx
。@Mr369然后,根据您的规格,您最好提取所有匹配项,然后仅获取最后出现的项,请参阅。