用于匹配括号之间的正则表达式 (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\)
所有这些模式都会寻找 name
或 Name
或 NAME
之前有 (
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 或 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\)
所有这些模式都会寻找 name
或 Name
或 NAME
之前有 (
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)(?=[^()]*\))