正则表示欧元符号(€)

时间:2017-08-14 11:52:41

标签: r regex

我想在文本中提取带有€符号的货币,我的文字是例如:

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

我的正则表达式是:

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

当我在文本上运行正则表达式时,我的输出低于输出:

[[1]]
character(0)

任何人都可以告诉正则表达式有什么问题,以及为什么即使在(\u20AC)之后我也无法提取€符号。

3 个答案:

答案 0 :(得分: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 :(得分: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 :(得分:0)

您的模式与字符串不匹配,因为您的模式(€)[0-9]+.[0-9]+\\s(m|b)illion+,即[0-9]+.[0-9]+部分,至少需要2个数字,应该是&#34; split&#34;任何1个字符。这意味着,您可以匹配1t6 million1.6 billionnnn(由于量化nn而匹配了多个n+

您没有获得任何匹配,因为您将视为\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]+ - 一位或多位
  • (?:\\.[0-9]+)? - .出现1次或0次,然后是1位或更多位
  • \\s* - 零个或多个空格
  • [mb] - mb
  • illion - 文字子字符串。