R中的正则表达式

时间:2015-06-16 17:22:28

标签: regex r

我发现了一些类似的问题 R - Select string text between two valuesregex for n characters or at least m characters, 但我仍然遇到麻烦

说我在r

中有一个字符串
testing_String <- "AK ADAK NAS PADK ADK 70454 51 53N 176 39W 4 X T 7"

我需要能够在字符串中包含2个字符(AK)和PADK,ADK的第一个元素之间拉取任何内容。 PADK和ADK将改变字符,但长度总是4和3个字符。

所以我需要拉

ADAK NAS

我想出了这个,但是从AK到ADK的所有东西都是

^[A-Za-z0_9_]{2}(.*?) +[A-Za-z0_9_]{4}|[A-Za-z0_9_]{3,}

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,这应该可以解决问题:

\b[A-Z]{2}\s+(.+?)\s+[A-Z]{4}\s+[A-Z]{3}\b

Demo

你必须切换perl = TRUE选项(使用一个像样的正则表达式引擎)。

\b表示字边界。所以这个模式寻找一个匹配,从一个2个字母的单词开始,以一个4个字母的单词后跟一个3个字母的单词结束。您的价值将在第一组中。

或者,您可以编写以下内容以避免使用捕获组:

\b[A-Z]{2}\s+\K.+?(?=\s+[A-Z]{4}\s+[A-Z]{3}\b)

但我更喜欢第一种方法,因为它更容易阅读。

答案 1 :(得分:2)

perl = TRUE支持Lookbehind,所以这个正则表达式会做你想要的:

999