我希望从数据集提取一系列3个字母代码。每个条目都有一组3个大写字母,它们不是"CCV",而是它们它们在每个条目中的位置不同。
当前我正在尝试:(?!CCV)[A-Z]{3}
我有一个条目的数据集:
CCV_21123214_AAA
CCV_02390394_AAC
094804958_AAA_ee9r80
BLAH_CCV_odfdkk_BBB
和希望:
AAA
AAC
AAA
BBB
问题是我目前的方法一直从其他大写单词中抓取字母,长度超过3个字母,如"BLAH",将其部分作为三元组,如:
AAA
BLA
LAH
AAC
是否有一种方法可以只找到大写字母的三联体?
您可能需要这样的内容:
(?<=b|_)(?!CCV)[A-Z]{3}(?=b|_)
首先,它将查看后面,以确保前面的标记是下划线或词边界(b
)。然后,它将向前看,以确保没有找到可怕的CCV
。然后它将匹配3个大写字母,然后向前查看以确保下一个标记是下划线或单词边界。
Regex101的演示
由于使用的是R语言,因此需要转义反斜杠,生成
(?<=\b|_)(?!CCV)[A-Z]{3}(?=\b|_)
如果您只对查找包含字母的行感兴趣,或者可以使用捕获组提取组合,则可以使用
(?:b|_)(?!CCV)([A-Z]{3})(?:b|_)
它检查单词边界(b
)或下划线(_
),后面没有CCV
,捕获(如果删除括号只是匹配)字母,然后再次匹配单词边界或下划线。
点击regex101查看。
如果支持向后查找(不是javascript),那么您可以使用
(?<=b|_)(?!CCV)([A-Z]{3})(?=b|_)
例子。