首页 > 解决方案 > 正则表达式将逗号替换为点分隔符

问题描述

我正在尝试将逗号分隔符替换为数字中的点分隔符(反之亦然),而行可能有其他点和逗号。我尝试使用 gsub(),但不知道如何阻止它将替换模式识别为字符串。

例如,假设我有一条线

`Today I bought apples, oranges for 3,55 dollars`

我想以价格将逗号分隔符替换为点分隔符:

`Today I bought apples, oranges for 3.55 dollars`

一种天真的gsub方法不起作用,因为我想:

`gsub('[[:digit:]],[[:digit:]]',
      '[[:digit:]][.][[:digit:]]',
      'Today I bought apples, oranges for 3,55 dollars')`

这显然给出了[1] "Today I bought apples, oranges for [[:digit:]][.][[:digit:]]5 dollars",即 gsub 将替换视为字符行。

除了向gsub(). 那我能做什么?我想,也许我可以写一个函数来匹配这个模式,然后基本上替换,.这个模式里面,然后把它放回句子中。但是,我希望有一个更短的解决方案来解决这样的问题。有任何想法吗?

标签: rregexgsub

解决方案


您可以使用捕获组并在替换中引用它们:

gsub("(\\d+),(\\d+)", "\\1.\\2", "Today I bought apples, oranges for 3,55 dollars")

# [1] "Today I bought apples, oranges for 3.55 dollars"

推荐阅读