在 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 中捕获组的主要内容,如果未能解决你的问题,请参考以下文章