正则表达式将逗号替换为点分隔符

时间:2018-04-24 12:21:29

标签: r regex gsub

我正在尝试将逗号分隔符替换为数字中的点分隔符(反之亦然),而行可能有其他点和逗号。我尝试使用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()提供除字符串以外的任何内容。那我该怎么办?我记得也许我可以编写一个匹配此模式的函数,然后基本上将,替换为此模式中的.并将其放回句子中。但是,我希望有一个更短的解决方案来解决这个问题。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

我们可以使用正则表达式外观匹配数字和数值前的,,并将其替换为.

gsub("(?<=[0-9]),(?=[0-9])", ".", str1, perl = TRUE)
#[1] "Today I bought apples, oranges for 3.55 dollars"

数据

str1 <- 'Today I bought apples, oranges for 3,55 dollars'

答案 2 :(得分:1)

您可以使用括号对每个数字进行分组,并在替换的第二部分中调用它们。 \\1下面会回忆第一组括号,第二组回复\\2

gsub('([[:digit:]]),([[:digit:]])','\\1.\\2','Today I bought apples, oranges for 3,55 dollars')
# [1] "Today I bought apples, oranges for 3.55 dollars"