如何在左括号前插入白色 space

How to insert a white space before open bracket

我有一个字符串3.4(2.5-4.7),我想在左括号“(”前插入一个白色的space,这样字符串就变成了3.4 (2.5-4.7).

知道如何在 R 中完成吗?

尝试

gsub('(.*)(\(.*\))', '\1 \2', '3.4(2.5-4.7)')
#[1] "3.4 (2.5-4.7)"

正则表达式的工作方式是创建两个组。第一组 (.*) 接受所有元素,第二组 (\(.*\)) 接受括号后的所有元素。请注意,我们需要转义括号,所以我们使用 \(。然后我们加入这两个组,它们之间有 space \1 \2

一个非常简短的方法是使用 sub,它将第一个左括号 ( 替换为 space 后跟一个左括号,即 (.

x <- '3.4(2.5-4.7)'
sub("\(", " (", x)
# [1] "3.4 (2.5-4.7)"

或者,您可以指定参数 fixed = TRUE,它认为模式是固定的而不是正则表达式。

x <- '3.4(2.5-4.7)'
sub("(", " (", x, fixed = TRUE)
# [1] "3.4 (2.5-4.7)"
x <- "3.4(2.5-4.7)"
sub("(.*)(?=\()", "\1 ", x, perl = T)
[1] "3.4 (2.5-4.7)"

此正则表达式基于 lookahead:它创建一个捕获组,包含所有内容直到 lookahead,即左括号 (?=\()),调用它并在 sub 的替换参数中在其后插入一个空格(这就足够了,除非每个字符串有多个这样的替换,在这种情况下需要 gsub)。需要添加参数 perl = T 以启用前瞻。

编辑:

如果你有这样的字符串:

x <- "3.4(2.5to4.7)"

正则表达式稍微复杂一些;尽管基本思想保持不变:将字符串分成不同的捕获组 (...),然后在添加查找空格的同时在替换参数中使用适当的反向引用来回忆这些组:

sub("(.*)(\(\d+\.\d+)(to)(\d+\.\d+\))", "\1 \2 \3 \4", x)
[1] "3.4 (2.5 to 4.7)"

EDIT2:

x <- '3.4(2.5,4.7)'
sub("(.*)(\(\d+\.\d+)(,)(\d+\.\d+\))", "\1 \2\3 \4", x)
[1] "3.4 (2.5, 4.7)"

EDIT3:

x <- '3(2,4)'
sub("(.*)(\(\d+)(,)(\d+)", "\1 \2\3 \4", x)