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未捕获组:(withperl=true
)。一个想法是在消费之前放置*
。像这样的东西,它不会捕获所有大小的东西吗?@Mr369是的,它会。有关您要查找的结果,请参阅捕获组1@emsimpson92您更改了正则表达式,但它现在不匹配,比如说,40l
。@Mr369,但不捕获组:(withperl=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然后,根据您的规格,您最好提取所有匹配项,然后仅获取最后出现的项,请参阅。