2017-08-14 104 views
0

我想提取与€标志货币的文字和我的文字如:正则表达式的欧元符号(€)

"€0.74 million developer fund of €2 billion carbon emission" 

我正则表达式是:

"(\u20AC)[0-9]+.[0-9]+\\s(m|b)illion+" 

,当我正则表达式上运行文字我得到以下的输出:

[[1]] 
character(0) 

谁能告诉什么是错的正则表达式,为什么我不能够提取甚至把后签署€那就是(\u20AC)

+0

请分享您的代码,也请让我们知道您期望的输出。 –

+0

我的代码是“(u20AC)[0-9] +。[0-9] + \\ s(m | b)illion +”,我预计[1]“74万欧元”“20亿欧元” –

+0

它不是代码,它是一个正则表达式。正则表达式在代码中使用。请分享代码。 –

回答

1

尝试使用不同的代码,...喜欢

((\x80)[0-9]+.[0-9]+\\s(m|b)illion).* 

这将捕获欧元以适当的方式

(我用GSUB BTW:

z = "€0.74 million developer fund of €2 billion carbon emission" 
gsub("((\x80)[0-9]+.[0-9]+\\s(m|b)illion).*","\\1",z) 

然而,这现在只捕获第一个......但我认为这很容易解决)

2

使用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" 
+1

epi99当我按照你的回答我越来越低[[1]] 字符(0) –

+0

@NaveenGoud,它很难知道什么;不同的。我建议不断简化正则表达式,看看问题出在哪里。一个猜测可能是编码 - 所以尝试没有欧元符号编码的正则表达式。 – epi99

0

你的模式不匹配,因为你的模式串,(€)[0-9]+.[0-9]+\\s(m|b)illion+,即[0-9]+.[0-9]+部分,需要至少2个数字,应该与任何1个字符“分开”,也就是说,您可能匹配1t6 million1.6 billionnnn(若干n由于量化为nn+)。

你没有得到任何比赛,因为你werote \u20AC,或者你会得到1场,0.74 million

> p = "(€)[0-9]+.[0-9]+\\s(m|b)illion+" 
> str_extract_all(txt, p) 
[[1]] 
[1] "\u00800.74 million" 

为了解决这个问题,你可以使用一个基础R regmatchesgregexpr

> 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 

注意我用cat来显示Unicode字符串结果,因为这些是实际提取的值。

图案的详细资料

  • - 一个欧元符号
  • [0-9]+ - 1或多个数字
  • (?:\\.[0-9]+)? - 1或0的出现的一个.,然后1个或多个数字
  • \\s* - 零个或多个空格
  • [mb] - mb
  • ​​- 文字子串。