在 R 中捕获组

Posted

技术标签:

【中文标题】在 R 中捕获组【英文标题】:Capturing Group in R 【发布时间】:2022-01-17 05:16:48 【问题描述】:

然后我在 R 中遵循模式 Set(?:Value)? 如下:

grepl('Set(?:Value)?', 'Set(Value)', perl=T)

这个模式是由

1- Set
2- Set Value
3- Set(Value)

但我只想匹配两个第一种情况和第三种情况。有人可以帮帮我吗?

谢谢

【问题讨论】:

可能类似于grepl("Set($|[^\\(]Value)", strings) 或者可以试试grepl('^Set(?![(]+)(?:Value)?', v1, perl = TRUE) 你可以试试Set(?:\\(Value\\))?$ 谢谢。 (?之后的]是什么意思? (? 后面没有]。请参阅下面的帖子以及所有说明。 【参考方案1】:

你可以使用

grepl('^Set(?:\\s+Value)?$', x)
grepl('\\bSet(?!\\(Value\\))(?:\\s+Value)?\\b', x, perl=TRUE)

请参阅 regex demo #1 和 regex demo #2。

详情

^Set(?:\\s+Value)?$ - 字符串开头,Set,一个或多个空格 (\s+) 和 Value 的可选序列,然后是字符串结尾 \bSet(?!\(Value\))(?:\s+Value)?\b: \b - 字边界 Set - Set 字符串 (?!\(Value\)) - 此位置不允许使用 (Value) 字符串 (?:\s+Value)? - 一个或多个空格 (\s+) 和 Value 的可选序列 \b - 字边界

查看R demo:

x <- c("Set", "Set Value", "Set(Value)")
grep('^Set(?:\\s+Value)?$', x, value=TRUE)
## => [1] "Set"       "Set Value"
grep('\\bSet(?!\\(Value\\))(?:\\s+Value)?\\b', x, perl=TRUE, value=TRUE)
## => [1] "Set"       "Set Value"

【讨论】:

以上是关于在 R 中捕获组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sed 中指定非捕获组?

在 Javascript 中用大写替换正则表达式捕获组

捕获组之前或捕获组之后的正则表达式,具有单个捕获组

在 Shell 脚本中捕获命名组

捕获异常的两种方式

Java 正则表达式之捕获组