正则表达式:匹配单词,省略换行符

时间:2015-02-03 17:40:27

标签: regex xml r

我是regex(和stackoverflow btw)的新手并尝试提取"真实"使用R:

来解决这个问题
"\n\n\nclone\nstar\n\n\n\n\nbrain\nstar\n\n\n\n\ncalculator\nstar\n\n\n\n\nadding machine\nstar\n\n\n\n\nartificial intelligence\nstar"

所以我想匹配:克隆,大脑,计算器,添加机器,人工智能。

我用(?<=\\n)(.*?)(?=\\nstar)尝试了它似乎很接近......但它仍然没有给我我想要的东西。我想我不必指定\ n而是使用一些省略换行注释?

5 个答案:

答案 0 :(得分:2)

(?<=\\n)((?:(?!\\n).)*?)(?=\\nstar)

试试这个。看看演示。

https://regex101.com/r/vD5iH9/63

.*?会捕获包括\n在内的所有内容。因此,请使用lookahead检查是否未捕获\n

答案 1 :(得分:0)

你想说出这些话吗?

strsplit(x,'\n+')

或匹配他们?

gsub('[a-zA-Z]+','HELLOWORLD',x)

答案 2 :(得分:0)

如果你想得到一个单词的向量

x <- "\n\n\nclone\nstar\n\n\n\n\nbrain\nstar\n\n\n\n\ncalculator\nstar\n\n\n\n\nadding machine\nstar\n\n\n\n\nartificial intelligence\nstar"
x <- gsub("\n"," ",x)
x <- unlist(strsplit(x," "))
x <- x[x != ""]

答案 3 :(得分:0)

这是通过一个相对简单的正则表达式来实现的:

library(gsubfn)

strapplyc(x, "([^\n]*).star", simplify = c)

,并提供:

[1] "clone"  "brain"  "calculator"  "adding machine"         
[5] "artificial intelligence"

注意:以下是正则表达式的可视化:

([^\n]*).star

Regular expression visualization

Debuggex Demo

答案 4 :(得分:0)

只需在\ nstar或\ n上拆分,并可选择删除前导字符以避免空第一个字符串。

strsplit(x, "(\nstar|\n)+")   # OR
strsplit(gsub("^\n*", "", x), "(\n|star)+")[[1]]
[1] "clone"                   "brain"                   "calculator"             
[4] "adding machine"          "artificial intelligence"