如何匹配括号中的任何单词,但至少有2个大写字母?

时间:2017-07-24 20:16:38

标签: r regex

从这段文字:

[1] "Percentage of Participants Who Achieved a 75% Improvement (Response) in the Psoriasis Area Severity Index (PASI-75) at Week 16 From Baseline"                                                                 
[3] "Percentage of Participants Who Achieved a Static Physician Global Assessment (sPGA) Score of Clear (0) or Almost Clear (1) With at Least 2 Points Reduction From Baseline"                                    
[15] "Change From Baseline in the Mental Component Summary (MSC) Score of the Medical Outcome Study Short Form 36-item (SF-36) Health Survey Version 2.0 at Week 16"     

我想匹配:PASI-75,sPGA,MSC,SF-36,所以不是'响应',不是(1)也不是(0)。 我想要使​​用的正则表达式应该是这样的: \([a-zA-Z0-9-]*&[A-Z]{2,}\)但不知道如何在此处表达&。一些线程建议(?=query1)(?=query2),但它在这里不起作用。

3 个答案:

答案 0 :(得分:3)

尝试\([^\)]*[A-Z]{2}[^\)]*\)

匹配(,零个或多个非)字符,两个大写字母,零个或多个非)个字符和一个)

允许非连续大写的替代方案,但仍然限制匹配单个词:

\([^\)]*[A-Z][^\)]*[A-Z][^\)]*\)

匹配(,零个或多个非)字符,一个大写字母,零个或其他非)字符,一个大写字母,零或更多非)字符和)

答案 1 :(得分:1)

假设(从你的例子中)你想要匹配括号内的任何非空格字符,我会说最简单的解决方案是:

\(\S*[A-Z]{2}\S*\)

答案 2 :(得分:-2)

你想要的是lookahead。 正则表达式引擎将首先尝试匹配两个大写字母。 像这样:

\b\((?=[A-Z]{2})[a-zA-Z0-9]*\)\b

(?= [A-Z] {2})告诉引擎先查找两个大写字母。 如果它找不到两个首都,它将跳过整个单词。