识别三个大写字母



我希望从数据集提取一系列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|_)

例子。

最新更新