【问题标题】:Regex/grep strings containing us currency包含我们货币的正则表达式/grep 字符串
【发布时间】:2013-01-04 15:09:25
【问题描述】:

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

'$34232 foo    \n  bar'

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

谢谢!

【问题讨论】:

  • 已经在这里回答了,或多或少:stackoverflow.com/questions/354044/…
  • 顺便说一句,如果您将示例视为“字符串列表”(不是;它是长度为 1 的字符向量),您可能需要使用 strsplit(z,"[[:space:]]+")[[1]] 将其转换为一个字符向量。

标签: regex r


【解决方案1】:

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

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

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

@Cerbrus 的答案 '\\$[0-9,.]+' 将匹配得更广泛一些(例如,它将匹配 $456.89$367,245,100)。它还将匹配一些不可信的货币字符串,例如$45.13.89$467.43,2,1(即逗号只能用于美元段中的 3 位数分组;美元和美分之间应该只有一个小数点)。我们的两个答案都将(不正确?)匹配$45abc。如果幸运的话,您的数据不包含任何这些棘手的可能性。 一般来说要做到这一点很困难。 cmets ( What is "The Best" U.S. Currency RegEx? ) 中提到的答案尝试这样做,因此具有更复杂的答案,但如果您通过适当保护 $ 将答案调整为 R 可能会很有用。

【讨论】:

  • 如果您所做的只是grep,即寻找匹配项,那么您不需要+,因为如果$ 后面有1 个数字,那么至少有一。省略 + 可能会加快速度(尽管加速可能太小而无法关心,除非这些是非常长的向量)。 + 对于替换或提取数字很重要。
【解决方案2】:

当然有:

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

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

【讨论】:

  • 在 R 中,必须使用双 `\`。
猜你喜欢
  • 2012-05-11
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 2011-06-27
  • 2022-11-26
  • 2021-03-16
  • 2010-10-23
相关资源
最近更新 更多