为什么 gsubfn 会省略部分匹配项?
why does gsubfn omit part of the match?
我分析文本字符串并尝试用逗号 ,
替换圆括号 ()
内的所有点 .
我找到了匹配括号内所有内容的正则表达式:
text <- "let's count (get . this . without dots) the days?"
brackets = "\((.*?)\)"
regmatches(text,regexpr(brackets,text))
给我:
[1] "(get . this . without dots)"
如 所述,我可以使用 gsubfn
进行更改:
library(gsubfn)
gsubfn(brackets, ~ gsub("\.", ",",x), text)
给我:
[1] "let's count get , this , without dots the days?"
而不是我想得到的:
[1] "let's count (get , this , without dots) the days?"
为什么 gsubfn 会忽略我匹配的一部分? (即括号)
有没有其他方法可以将 ()
中的 .
替换为 ,
您在这里所做的是不在匹配中包含 paranthesis/brackets。即您没有捕获括号。尝试
text <- "let's count (get . this . without dots) the days?"
brackets = "(\(.*?\))" # NOTE THAT I CAPTURED THE PARANTHESIS TOO
regmatches(text,regexpr(brackets,text))
[1] "(get . this . without dots)"
library(gsubfn)
gsubfn(brackets, ~ gsub("\.", ",",x), text)
[1] "let's count (get , this , without dots) the days?"
您可以在原始正则表达式中保留任意数量的捕获组,无需修改模式,只需告诉 gsubfn
使用 整个匹配 传递 backref=0
参数:
gsubfn("\((.*?)\)", ~ gsub("\.", ",",x), text, backref=0)
[1] "let's count (get , this , without dots) the days?"
我们可以使用基数 R gsub
正向预测来解决这个问题。
gsub("\.(?=[^()]*\))", ",", text, perl = TRUE)
#[1] "let's count (get , this , without dots) the days?"
只有当它右边的第一个圆括号是右括号时,它才匹配一个点 (.
)。 [^()]
匹配所有不是圆括号的东西。然后将点替换为逗号。
我分析文本字符串并尝试用逗号 ,
()
内的所有点 .
我找到了匹配括号内所有内容的正则表达式:
text <- "let's count (get . this . without dots) the days?"
brackets = "\((.*?)\)"
regmatches(text,regexpr(brackets,text))
给我:
[1] "(get . this . without dots)"
如 gsubfn
进行更改:
library(gsubfn)
gsubfn(brackets, ~ gsub("\.", ",",x), text)
给我:
[1] "let's count get , this , without dots the days?"
而不是我想得到的:
[1] "let's count (get , this , without dots) the days?"
为什么 gsubfn 会忽略我匹配的一部分? (即括号)
有没有其他方法可以将 ()
中的 .
替换为 ,
您在这里所做的是不在匹配中包含 paranthesis/brackets。即您没有捕获括号。尝试
text <- "let's count (get . this . without dots) the days?"
brackets = "(\(.*?\))" # NOTE THAT I CAPTURED THE PARANTHESIS TOO
regmatches(text,regexpr(brackets,text))
[1] "(get . this . without dots)"
library(gsubfn)
gsubfn(brackets, ~ gsub("\.", ",",x), text)
[1] "let's count (get , this , without dots) the days?"
您可以在原始正则表达式中保留任意数量的捕获组,无需修改模式,只需告诉 gsubfn
使用 整个匹配 传递 backref=0
参数:
gsubfn("\((.*?)\)", ~ gsub("\.", ",",x), text, backref=0)
[1] "let's count (get , this , without dots) the days?"
我们可以使用基数 R gsub
正向预测来解决这个问题。
gsub("\.(?=[^()]*\))", ",", text, perl = TRUE)
#[1] "let's count (get , this , without dots) the days?"
只有当它右边的第一个圆括号是右括号时,它才匹配一个点 (.
)。 [^()]
匹配所有不是圆括号的东西。然后将点替换为逗号。