我是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而是使用一些省略换行注释?
答案 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
答案 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"