R 欧元符号的正则表达式(€;)
我想提取文本中带有欧元符号的货币,我的文本是例如:R 欧元符号的正则表达式(€;),r,regex,R,Regex,我想提取文本中带有欧元符号的货币,我的文本是例如: "€0.74 million developer fund of €2 billion carbon emission" 我的正则表达式是: "(\u20AC)[0-9]+.[0-9]+\\s(m|b)illion+" 当我在文本上运行regex时,我得到以下输出: [[1]] character(0) 有人能告诉我正则表达式有什么问题吗?为什么我在放入(\u20AC)后仍无法提取欧元符号。尝试使用不同的代码。。。像 ((\x80)[
"€0.74 million developer fund of €2 billion carbon emission"
我的正则表达式是:
"(\u20AC)[0-9]+.[0-9]+\\s(m|b)illion+"
当我在文本上运行regex时,我得到以下输出:
[[1]]
character(0)
有人能告诉我正则表达式有什么问题吗?为什么我在放入
(\u20AC)
后仍无法提取欧元符号。尝试使用不同的代码。。。像
((\x80)[0-9]+.[0-9]+\\s(m|b)illion).*
这将以适当的方式抓住欧元
(我使用gsub顺便说一句:
z = "€0.74 million developer fund of €2 billion carbon emission"
gsub("((\x80)[0-9]+.[0-9]+\\s(m|b)illion).*","\\1",z)
不过,现在只捕捉到第一个问题……但我认为这很容易解决)使用stringr。在正则表达式中,
\s
应该是\\s
。以下用途
\\d
用于数字(仅比[0-9]简单)
(.\\d+)
用于可选小数点-之前括号中的所有内容
s <- "€0.74 million developer fund of €2 billion carbon emission"
r <- "(\u20AC)\\d+(.\\d+)?\\s(m|b)illion+"
library(stringr)
str_extract_all(s,r)
# [1] "€0.74 million" "€2 billion"
s您的模式与字符串不匹配,因为您的模式,(€)0-9]+.[0-9]+\\s(MB)million++
,即[0-9]+.[0-9]+
部分,需要至少两位数字,且应与任何一个字符“拆分”。这意味着,您可以匹配1.6百万个
,或16亿个字符
(由于量化的n
,n+
,匹配了多个n
)
您没有获得任何匹配项,因为您将€
记录为\u20AC
,或者您将获得一个匹配项,74万
:
> p = "(€)[0-9]+.[0-9]+\\s(m|b)illion+"
> str_extract_all(txt, p)
[[1]]
[1] "\u00800.74 million"
要解决此问题,可以将基本Rregmatches
与gregexpr
一起使用:
> txt <- "€0.74 million developer fund of €2 billion carbon emission"
> res <- regmatches(txt, gregexpr("€[0-9]+(?:\\.[0-9]+)?\\s*[mb]illion", txt, ignore.case=TRUE))
> lapply(res, cat, "\n")
€0.74 million €2 billion
[[1]]
NULL
>txt res lappy(res,cat,“\n”)
74万欧元20亿欧元
[[1]]
无效的
注意:我使用了cat
来显示Unicode字符串结果,因为它们是实际提取的值
图案细节
€
-欧元符号
[0-9]+
-1位或更多数字
(?:\\.[0-9]+)?
-a
出现1或0次,然后出现1个或多个数字
\\s*
-零个或多个空格
[mb]
-m
或b
illion
-文字子字符串
请分享您的代码,同时也请告知您期望的输出。我的代码是“(\u20AC)[0-9]+.[0-9]+\\s(m | b)illion+”,我期望[1]“€74万”“€20亿”“。这不是一个代码,它是一个正则表达式。正则表达式在代码中使用。请分享代码。str_extract_all(coll(txt,ignore|case=TRUE),”(\u20AC)[0-9]+.[0-9]\\s(m | b)illion+)我的代码是哪里txt=“€0.74百万开发基金20亿欧元碳排放量”尝试一下str\u extract\u all(txt),(?i)€[0-9]+(?:\\\.[0-9]+)?\\s*[mb]illion”)
epi99当我按照你的答案做时,我的字数已经低于[1]]个字符(0)@NaveenGoud,很难知道有什么不同。我建议继续简化正则表达式,看看问题出在哪里。一个猜测可能是编码——因此尝试不使用欧元符号编码的正则表达式。