正则表达式在某个字符R Perl之前抓取单词

时间:2013-02-19 00:39:42

标签: regex perl r

我需要在R中的字符串中的一个独特字符(在我的情况下:&)之前和之后得到单词。

我需要从这样的东西得到'word1': “......某事word1& word2 something ......”

我在R中使用Perl正则表达式后可以得到这个词:(?<=& )[^ ]*(?= ) (它似乎按照我想要的方式行事。我通过梳理我在本网站上找到的答案得到了它)

我现在需要在&符号前面加上单词。单词的长度发生变化,其他前面单词的数量以及空格也会发生变化。第一个字可以是字母和数字,只是被两边的空格所限制。

4 个答案:

答案 0 :(得分:15)

如果您使用(\S+)\s*&\s*(\S+),则会捕获&两边的字词。这允许在&符号周围选择空格。

您需要将R字符串中的反斜杠加倍,并使用regexecregmatches函数应用模式并提取匹配的子字符串。

string  <- "...something something word1 & word2 something..."
pattern <- "(\\S+)\\s*&\\s*(\\S+)"
match   <- regexec(pattern, string)
words   <- regmatches(string, match)

现在words是一个包含三项向量的单元素列表:整个匹配的字符串,后跟第一个和第二个反向引用。因此words[[1]][2]word1words[[1]][3]word2

答案 1 :(得分:5)

(?<=&)(\w*)(?=&)"

将匹配&符号之间的任何单词字符。使用积极的外观和积极的前瞻。

答案 2 :(得分:2)

\b(.*?)\b&

该单词将在第1组中捕获。这是一个不情愿的匹配包含在由两个边界包围的任何字符串中;在第二个边界之后是&

答案 3 :(得分:1)

可以使用gsubfn package中的strapplyc使用相对简单的正则表达式来完成。假设s是你的字符串:

library(gsubfn)
strapplyc(s, "(\\w+) & (\\w+)")
相关问题