用于匹配括号之间的正则表达式 (ICU)

Regex (ICU) for matching between parentheses

寻找一些正则表达式,它会为括号内出现的单词创建一个捕获组,忽略括号本身。正则表达式必须是 PCRE 或 ICU。

输入:( lakshd asd___ asa1123 Name : _____)

期望输出:Name

我尝试过的:

\((Name|name|NAME)\)

(?<=\()name|Name|NAME(?=\))

\(name|Name|NAME\)

What I've tried:

\((Name|name|NAME)\)
(?<=\()name|Name|NAME(?=\))
\(name|Name|NAME\)

所有这些模式都会寻找 nameNameNAME 之前有 ( immediately) right 之后,区别在于作为匹配项捕获或返回的内容。要匹配括号内的某个单词,您需要在需要获取的值之前使用\([^()]*,在它之后使用[^()]*\)

另外,提取你已经知道的东西是没有意义的。

所以,如果你打算从括号中提取最后一个词,你可以使用

> library(stringr)
> s = "( lakshd  asd___ asa1123 Name : _____)"
> res <- str_match(s, "(?i)\([^()]*\b([a-z]\w*)\b[^()]*\)")
> res[,2]
[1] "Name"

请注意 str_match 允许访问 捕获的 值。

(?i)\([^()]*\b([a-z]\w*)\b[^()]*\) 模式匹配括号和其中的最后一个完整单词。

如果不太可能出现嵌套级别的括号,则查看当前位置是否会在末尾跟一个右括号,而左括号应该已经打开就可以解决问题(适用于两者ICU 和 PCRE):

(Name|name|NAME)(?=[^()]*\))

PCRE live demo