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

时间:2016-08-31 15:13:37

标签: regex r pcre icu

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

输入:( lakshd asd___ asa1123 Name : _____)

所需输出:Name

我尝试了什么:

\\((Name|name|NAME)\\)

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

\\(name|Name|NAME\\)

2 个答案:

答案 0 :(得分:1)

  

我尝试了什么:

     

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

所有这些模式都会查找nameNameNAME之前立即( <{1}} 之后,差别是被捕获或作为匹配返回的内容。要匹配括号内的某些字词,您需要在需要获得的值之前使用),并在之后使用\([^()]*

此外,提取您已经知道的内容毫无意义。

因此,如果您打算从括号中提取最后一个单词,则可以使用

[^()]*\)

请注意,> library(stringr) > s = "( lakshd asd___ asa1123 Name : _____)" > res <- str_match(s, "(?i)\\([^()]*\\b([a-z]\\w*)\\b[^()]*\\)") > res[,2] [1] "Name" 允许访问捕获的值。

str_match模式匹配括号和它的最后一个整数字。

答案 1 :(得分:0)

如果不太可能发生嵌套的括号级别,那么查看当前位置是否会在结尾处跟随一个右括号,同时应该打开一个左括号将会起作用(适用于ICU和PCRE):

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

PCRE live demo