2

下面的代码不起作用,因为无法正确读取 \10、\11 等的替换字符串。它将 \10 读取为 \1 并打印 0,你能帮我解决它吗?其中一个线程中有一个答案,说我应该使用捕获或命名组,但我并不真正了解如何使用它们。

headline <- gsub("regexp with 10 () brackets",
"\\1 ### \\2 ### \\3 ### \\4 ### \\5 ### \\6 ### \\7 ### \\8 ### \\9 ###
\\10### \\11### \\12### \\13### \\14### \\15### \\16",
page[headline.index])
4

2 回答 2

3

根据?regexp,命名捕获已在R-2.14.0中regexpr()和之后可用。gregexpr()不幸的是,它还不能用于sub()或者,事实证明,gsub(). 因此,它可能对您仍然有用,但可能需要比您希望的更多的跑腿工作。

(有关命名组的一些示例,请参阅示例部分?regexpr。)

稍后添加,遵循 GREG SNOW 的回答

gsubfn格雷格·斯诺(Greg Snow)暗示了用包裹做这件事的可能性。这是一个示例,表明它gsubfn()确实可以处理超过九个反向引用:

require(gsubfn)
string <- "1:2:3:4:5:6:7:8:9:10:11"
pat <- "^(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+:(\\d)+"
gsubfn(pat, ~ paste(a,b,c,d,e,f,g,h,i,j,k,j,i,h,g,f,e,d,c,e,a), string)  
# [1] "1 2 3 4 5 6 7 8 9 10 11 10 9 8 7 6 5 4 3 5 1"
于 2011-11-30T05:28:51.197 回答
1

您可能会考虑使用gsubfnfrom the gsubfnpackage 而不是gsub,它为如何创建替换提供了更多选项。

于 2011-11-30T18:14:02.177 回答