我有一个字符串列表,其中一些包含美元数字。例如:包含我们货币的正则表达式/ 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]]将其转换为字符向量。 –