7

我需要在 R 中的字符串中获取唯一字符(在我的情况下为:&)之前和之后的单词。

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

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

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

4

4 回答 4

16

如果你使用(\S+)\s*&\s*(\S+),那么双方的单词&都会被捕获。这允许在&符号周围使用可选的空格。

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

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

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

于 2013-02-19T00:46:08.813 回答
5
(?<=&)(\w*)(?=&)"

将匹配符号之间的任何单词字符&。使用正向后视和正向前瞻。

于 2013-02-19T00:48:47.677 回答
2
\b(.*?)\b&

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

于 2013-02-19T00:41:50.190 回答
1

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

library(gsubfn)
strapplyc(s, "(\\w+) & (\\w+)")
于 2013-02-19T02:19:48.827 回答