正则表达式将逗号替换为点分隔符
Regex to replace comma to dot separator
我正在尝试将数字中的逗号分隔符替换为点分隔符(反之亦然),而行可能有其他点和逗号。我尝试使用 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()
的字符串,我不能提供任何东西。那我该怎么办?我想到也许我可以编写一个匹配此模式的函数,然后基本上将此模式内的 ,
替换为 .
并将其放回句子中。但是,我希望有一个更短的解决方案来解决这样的问题。有什么想法吗?
我们可以使用正则表达式环视来匹配数字和数值前的 ,
,并将其替换为 .
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'
您可以用括号将每个数字分组,并在替换的第二部分回忆它们。下面 \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"
您可以使用捕获组并在替换中引用它们:
gsub("(\d+),(\d+)", "\1.\2", "Today I bought apples, oranges for 3,55 dollars")
# [1] "Today I bought apples, oranges for 3.55 dollars"
我正在尝试将数字中的逗号分隔符替换为点分隔符(反之亦然),而行可能有其他点和逗号。我尝试使用 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()
的字符串,我不能提供任何东西。那我该怎么办?我想到也许我可以编写一个匹配此模式的函数,然后基本上将此模式内的 ,
替换为 .
并将其放回句子中。但是,我希望有一个更短的解决方案来解决这样的问题。有什么想法吗?
我们可以使用正则表达式环视来匹配数字和数值前的 ,
,并将其替换为 .
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'
您可以用括号将每个数字分组,并在替换的第二部分回忆它们。下面 \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"
您可以使用捕获组并在替换中引用它们:
gsub("(\d+),(\d+)", "\1.\2", "Today I bought apples, oranges for 3,55 dollars")
# [1] "Today I bought apples, oranges for 3.55 dollars"