我分析了文本字符串,并尝试用逗号.替换圆括号()中的所有点,
我找到了一个与括号内的匹配匹配的正则表达式:

text <- "let's count (get . this . without dots) the days?"
brackets = "\\((.*?)\\)"
regmatches(text,regexpr(brackets,text))

给我:
[1] "(get . this . without dots)"

here所述,我可以使用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忽略了我的比赛的一部分? (即方括号)
还有其他方法可以将.中的()替换为,

最佳答案

您可以在原始正则表达式中保留任意数量的捕获组,而无需修改模式,只需通过传递gsubfn参数告诉backref=0使用整个匹配项即可:

gsubfn("\\((.*?)\\)", ~ gsub("\\.", ",",x), text, backref=0)
[1] "let's count (get , this , without dots) the days?"

关于r - 为什么gsubfn忽略了比赛的一部分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58903769/

10-10 17:21