2017-08-14 108 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
  • ​​- 文字子串。