我想实现这个结果:"raster(B04) + raster(B02) - raster(A10mB03)"
因此,我创建了这个正则表达式:B[0-1][0-9]|A[1,2,6]0m/B[0-1][0-9]"
我现在正尝试用"B04 + B02 - A10mB03"
gsub("B[0-1][0-9]]|[A[1,2,6]0mB[0-1][0-9]", "raster()", string)
的所有匹配项
我如何包含原始值B01, B02, A10mB03
?
PS:我也试过gsub("B[0-1][0-9]]|[A[1,2,6]0mB[0-1][0-9]", "raster(\\1)", string)
,但它没有用。
答案 0 :(得分:1)
基本上,您需要匹配一些文本并在替换模式中重复使用它。在基本R正则表达式方法中,如果没有capturing group,即一对非转义括号,在这种情况下包围整个正则表达式模式,并且使用\\1
replacement backreference,则无法做到这一点在替换模式中。
但是,您的正则表达式包含一些问题:[A[1,2,6]
被解析为匹配A
,[
,1
,,
,{的单个字符类{1}}或2
,因为您在6
之前放置了[
。另请注意,字符类中的A
与文字逗号匹配,并且它不是您所期望的。另一个类似的问题是使用,
- 它将任何ASCII数字与[0-9]]
匹配,然后匹配[0-9]
(]
字符不必以正则表达式模式进行转义)。
因此,表达式的潜在修复可能看起来像
]
甚至只是匹配一个或多个字符(考虑到你提供的样本字符串)
gsub("(B[0-1][0-9]|A[126]0mB[0-1][0-9])", "raster(\\1)", string)
可能会这样做。
请参阅R demo online。