3

我有一个字符串列表,其中一些包含美元数字。例如:

'$34232 foo    \n  bar'

有没有一个[r]命令可以只返回包含美元金额的字符串?

谢谢!

4

2 回答 2

4

用于\\$保护$否则意味着“字符串结尾”:

   grep("\\$[0-9]+",c("123","$567","abc $57","$abc"),value=TRUE)

这将选择包含一个美元符号后跟一个或多个数字(但不是 eg $abc)的字符串。 grepwithvalue=FALSE返回索引。grepl返回一个逻辑向量。R 特有的一点是,您需要指定\\$,而不仅仅是\$(即需要额外的反斜杠来保护):\$会给您一个“无法识别的转义”错误。

@Cerbrus 的答案 ,'\\$[0-9,.]+'将匹配得更广泛(例如,它将匹配$456.89or $367,245,100)。它还将匹配一些不可信的货币字符串,例如$45.13.89$467.43,2,1(即,逗号应该只允许用于美元段中的 3 位数分组;应该只有一个小数点分隔美元和美分)。我们的两个答案都会(不正确?)匹配$45abc。如果幸运的话,您的数据不会包含任何这些棘手的可能性。一般来说,要做到这一点很难。评论中提到的答案(什么是“最好的”美国货币正则表达式?)试图做到这一点,因此有更复杂的答案,但如果你通过保护来调整答案到 R 可能会很有用$适当地。

于 2013-01-04T15:12:57.260 回答
3

当然有:

'\\$[0-9,.]+'

\\$ //Dollar sign
[0-9,.]+ // One or more numbers, dots, or comma's.
于 2013-01-04T15:15:34.177 回答