我想提取與€標誌貨幣的文字和我的文字如:正則表達式的歐元符號(€)
"€0.74 million developer fund of €2 billion carbon emission"
我正則表達式是:
"(\u20AC)[0-9]+.[0-9]+\\s(m|b)illion+"
,當我正則表達式上運行文字我得到以下的輸出:
[[1]]
character(0)
誰能告訴什麼是錯的正則表達式,爲什麼我不能夠提取甚至把後簽署€那就是(\u20AC)
。
我想提取與€標誌貨幣的文字和我的文字如:正則表達式的歐元符號(€)
"€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億歐元」 –
它不是代碼,它是一個正則表達式。正則表達式在代碼中使用。請分享代碼。 –