我有一个字符串列表,其中一些包含美元数字。例如:
'$34232 foo \n bar'
是否有[r]
命令只能返回包含美元金额的字符串?
谢谢!
答案 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.