正则表达式的欧元符号(€)
我想提取与€标志货币的文字和我的文字如:正则表达式的欧元符号(€)
"€0.74 million developer fund of €2 billion carbon emission"
我正则表达式是:
"(\u20AC)[0-9]+.[0-9]+\\s(m|b)illion+"
,当我正则表达式上运行文字我得到以下的输出:
[[1]]
character(0)
谁能告诉什么是错的正则表达式,为什么我不能够提取甚至把后签署€那就是(\u20AC)
。
尝试使用不同的代码,...喜欢
((\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)
然而,这现在只捕获第一个......但我认为这很容易解决)
使用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"
epi99当我按照你的回答我越来越低[[1]] 字符(0) –
@NaveenGoud,它很难知道什么;不同的。我建议不断简化正则表达式,看看问题出在哪里。一个猜测可能是编码 - 所以尝试没有欧元符号编码的正则表达式。 – epi99
你的模式不匹配,因为你的模式串,(€)[0-9]+.[0-9]+\\s(m|b)illion+
,即[0-9]+.[0-9]+
部分,需要至少2个数字,应该与任何1个字符“分开”,也就是说,您可能匹配1t6 million
或1.6 billionnnn
(若干n
由于量化为n
,n+
)。
你没有得到任何比赛,因为你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 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
注意我用cat
来显示Unicode字符串结果,因为这些是实际提取的值。
图案的详细资料
-
€
- 一个欧元符号 -
[0-9]+
- 1或多个数字 -
(?:\\.[0-9]+)?
- 1或0的出现的一个.
,然后1个或多个数字 -
\\s*
- 零个或多个空格 -
[mb]
-m
或b
- - 文字子串。
请分享您的代码,也请让我们知道您期望的输出。 –
我的代码是“(u20AC)[0-9] +。[0-9] + \\ s(m | b)illion +”,我预计[1]“74万欧元”“20亿欧元” –
它不是代码,它是一个正则表达式。正则表达式在代码中使用。请分享代码。 –