我想在文本中提取带有€符号的货币,我的文字是例如:
"€0.74 million developer fund of €2 billion carbon emission"
我的正则表达式是:
"(\u20AC)[0-9]+.[0-9]+\\s(m|b)illion+"
当我在文本上运行正则表达式时,我的输出低于输出:
[[1]]
character(0)
任何人都可以告诉正则表达式有什么问题,以及为什么即使在(\u20AC)
之后我也无法提取€符号。
答案 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 million
或1.6 billionnnn
(由于量化n
,n
而匹配了多个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 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]+
- 一位或多位(?:\\.[0-9]+)?
- .
出现1次或0次,然后是1位或更多位\\s*
- 零个或多个空格[mb]
- m
或b
illion
- 文字子字符串。