识别大写字母的三元组

时间:2016-09-16 15:07:04

标签: regex

我希望从数据集中提取一系列3个字母代码。 每个条目都有一组3个大写字母,不是" CCV,"但是他们 每个条目的位置不同。

目前我正在尝试:     article.screen-width { background: rgb(153, 153, 153); } .window_scale { background: rgb(153, 153, 153); }

我有一个条目数据集,如:

(?!CCV)[A-Z]{3}

并希望:

CCV_21123214_AAA CCV_02390394_AAC 094804958_AAA_ee9r80 BLAH_CCV_odfdkk_BBB

问题是我目前的做法是不断抓取来自其他大写单词的字母超过3个字母,如" BLAH",将其中的部分字母视为三元组:

AAA AAC AAA BBB

有没有办法只找到大写字母的三元组?

2 个答案:

答案 0 :(得分:0)

如果你只对找到带字母的行感兴趣,或者可以使用捕获组来提取组合,你可以选择

(?:\b|_)(?!CCV)([A-Z]{3})(?:\b|_)

它会检查单词边界(\b)或下划线(_),而不是CCV,捕获(只是删除括号后才匹配)字母,然后再次匹配单词边界或下划线。

Check it out here at regex101

如果支持后台(不是javascript),那么你可以选择

(?<=\b|_)(?!CCV)([A-Z]{3})(?=\b|_)

Example here

答案 1 :(得分:0)

你可能想要的是这样的:

(?<=\b|_)(?!CCV)[A-Z]{3}(?=\b|_)

首先,它会向后看,以确保前一个标记是下划线或字边界(\b)。然后,它会向前看,以确保它找不到可怕的CCV。然后它将匹配3个大写字母,然后向前看以确保下一个标记是下划线或字边界。

Demonstration at Regex101

由于你在R工作,你需要逃避反斜杠,产生

(?<=\\b|_)(?!CCV)[A-Z]{3}(?=\\b|_)

作为你的最终模式字符串。