包含我们货币的正则表达式/ grep字符串

时间:2013-01-04 15:09:26

标签: regex r

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

'$34232 foo    \n  bar'

是否有[r]命令只能返回包含美元金额的字符串?

谢谢!

2 个答案:

答案 0 :(得分:4)

使用\\$来保护$,否则就意味着“字符串结尾”:

   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?)尝试这样做,因此答案明显更复杂,但如果您通过适当地保护$来调整答案,则可能会有用。 / p>

答案 1 :(得分:2)

当然有:

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

\\$ //Dollar sign
[0-9,.]+ // One or more numbers, dots, or comma's.