Roc*_*nce 7 regex string r special-characters
我想在模式"|"处分割一串字符
但
unlist(strsplit("I am | very smart", " | "))
[1] "I" "am" "|" "very" "smart"
Run Code Online (Sandbox Code Playgroud)
要么
gsub(pattern="|", replacement="*", x="I am | very smart")
[1] "*I* *a*m* *|* *v*e*r*y* *s*m*a*r*t*"
Run Code Online (Sandbox Code Playgroud)
nul*_*lob 16
|
是一个元字符.你需要逃避它(\\
在它之前使用).
> unlist(strsplit("I am | very smart", " \\| "))
[1] "I am" "very smart"
> sub(pattern="\\|", replacement="*", x="I am | very smart")
[1] "I am * very smart"
Run Code Online (Sandbox Code Playgroud)
编辑:您需要两个反斜杠的原因是单个反斜杠前缀是为特殊符号保留的,例如\n
(换行符)和\t
(制表符).有关更多信息,请参阅帮助页面?regex
.其他元字符是. \ | ( ) [ { ^ $ * + ?
Mar*_*rek 16
问题是默认情况下strsplit
将其解释" | "
为正则表达式,其中|
具有特殊含义(如"或").
使用fixed
参数:
unlist(strsplit("I am | very smart", " | ", fixed=TRUE))
# [1] "I am" "very smart"
Run Code Online (Sandbox Code Playgroud)
副作用是更快的计算.
stringr
替代方案:
unlist(stringr::str_split("I am | very smart", fixed(" | ")))
Run Code Online (Sandbox Code Playgroud)
如果要解析表而不是调用read.table
可能是更好的选择.小小的例子:
> txt <- textConnection("I am | very smart")
> read.table(txt, sep='|')
V1 V2
1 I am very smart
Run Code Online (Sandbox Code Playgroud)
所以我建议用Rcurl获取wiki页面,用XML抓取页面的有趣部分(它有一个非常简洁的函数来解析HTML表格),如果HTML格式不可用,则调用read.table
指定的sep
.祝好运!