我有一個字符串列表,其中一些包含美元數字。例如:包含我們貨幣的正則表達式/ grep字符串
'$34232 foo \n bar'
有一個[r]
命令,可以還給我只包含在他們的美元金額的字符串?
謝謝!
我有一個字符串列表,其中一些包含美元數字。例如:包含我們貨幣的正則表達式/ grep字符串
'$34232 foo \n bar'
有一個[r]
命令,可以還給我只包含在他們的美元金額的字符串?
謝謝!
使用\\$
保護$
否則意味着「字符串的結束」:
grep("\\$[0-9]+",c("123","$567","abc $57","$abc"),value=TRUE)
這將選擇包含一個美元符號後面跟着一個或多個數字(但不是如$abc
)字符串。 grep
與value=FALSE
返回索引。 grepl
返回一個邏輯向量。一個R特有的一點是,您需要指定\\$
,而不僅僅是\$
(即需要額外的反斜槓進行保護):\$
會給您一個「無法識別的轉義」錯誤。
@ Cerbrus的回答,'\\$[0-9,.]+'
將稍微更寬泛地匹配(例如,它將匹配$456.89
或$367,245,100
)。它也將匹配一些難以置信的貨幣字符串,例如$45.13.89
或$467.43,2,1
(即逗號應該只允許美元段中的3位數的分組;應該只有一個小數點分隔美元和美分)。我們的兩個答案都會(錯誤地)匹配$45abc
。如果幸運的話,您的數據不會包含任何這些棘手的可能性。一般來說很難;答案中提到的答案(What is "The Best" U.S. Currency RegEx?)試圖做到這一點,結果有更復雜的答案,但如果通過適當地保護$
來適應R的答案,那麼答案可能很有用。
如果你所做的只是'grep',即尋找匹配,那麼你不需要'+',因爲如果'$'後面有1個數字,那麼至少有一個。退出'+'可能會加快速度(儘管加速可能太小而無法關心,除非這些速度很長)。 '+'對於替換或提取數字很重要。 –
肯定有:
'\\$[0-9,.]+'
\\$ //Dollar sign
[0-9,.]+ // One or more numbers, dots, or comma's.
在R中,必須使用雙'\\'。 –
@RomanLuštrik:固定。 – Cerbrus
已經回答了這裏,或多或少:http://stackoverflow.com/questions/354044/what-is-the-best-us-currency-regex –
由方式,如果你想把你的例子看作「字符串列表」(它不是;它是長度爲1的字符向量),你可能需要使用'strsplit(z,「[[:space:]] +」)[ [1]]將其轉換爲字符向量。 –