用于维护匹配部分的正则表达式
Regex to maintain matched parts
我想达到这个结果:"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)
但是没用。
基本上,您需要匹配一些文本并在替换模式中重新使用它。在基础 R 正则表达式方法中,没有替换模式中的 capturing group, i.e. a pair of unescaped parentheses, enclosing the whole regex pattern in this case, and use a \1
replacement backreference 就无法做到这一点。
但是,您的正则表达式存在一些问题:[A[1,2,6]
被解析为与 A
、[
、1
、[匹配的单个字符 class =17=]、2
或 6
,因为您在 A
之前放置了 [
。另外,请注意字符 classes 中的 ,
匹配文字逗号,这不是您所期望的。另一个类似的问题是 [0-9]]
- 它匹配任何 ASCII 数字与 [0-9]
然后 ]
( ]
字符不必在正则表达式模式中转义).
因此,您的表达式的潜在修复可能如下所示
gsub("(B[0-1][0-9]|A[126]0mB[0-1][0-9])", "raster(\1)", string)
或者甚至只匹配 1 个或多个单词字符(考虑您提供的示例字符串)
gsub("(\w+)", "raster(\1)", string)
可能会。
我想达到这个结果:"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)
但是没用。
基本上,您需要匹配一些文本并在替换模式中重新使用它。在基础 R 正则表达式方法中,没有替换模式中的 capturing group, i.e. a pair of unescaped parentheses, enclosing the whole regex pattern in this case, and use a \1
replacement backreference 就无法做到这一点。
但是,您的正则表达式存在一些问题:[A[1,2,6]
被解析为与 A
、[
、1
、[匹配的单个字符 class =17=]、2
或 6
,因为您在 A
之前放置了 [
。另外,请注意字符 classes 中的 ,
匹配文字逗号,这不是您所期望的。另一个类似的问题是 [0-9]]
- 它匹配任何 ASCII 数字与 [0-9]
然后 ]
( ]
字符不必在正则表达式模式中转义).
因此,您的表达式的潜在修复可能如下所示
gsub("(B[0-1][0-9]|A[126]0mB[0-1][0-9])", "raster(\1)", string)
或者甚至只匹配 1 个或多个单词字符(考虑您提供的示例字符串)
gsub("(\w+)", "raster(\1)", string)
可能会。