Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 欧元符号的正则表达式(€;)_R_Regex - Fatal编程技术网

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"
要解决此问题,可以将基本R
regmatches
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,很难知道有什么不同。我建议继续简化正则表达式,看看问题出在哪里。一个猜测可能是编码——因此尝试不使用欧元符号编码的正则表达式。