R中换行符和空格匹配的混淆

时间:2018-10-30 21:33:41

标签: r newline gsub

我对下面的代码感到困惑,希望有人能给我一些见识,似乎在gsub中,换行可以与空格匹配在R中。

简而言之,我使用sprintf来准备SQL查询语句,并使代码可读且易于修改,我将该语句分为多行。 使用gsub来代替换行符,但是令我惊讶的是,似乎\\s+可以匹配换行符和多余的空格。

chr = 1
pos = 1002
ref = 'A'
alt = 'G'

cmd <- sprintf("select * from MyDB 
              where `chr` ='%s'
              and pos = %i 
              and ref = %s 
              and alt = %s", 
              chr, pos, ref, alt)


cmd # where new lines were evident 

query <- gsub(pattern='\\n+',replacement=" ", cmd)
query #no new line, extra spaces remaining

query2 <- gsub(pattern='\\s+',replacement=" ", cmd)
query2 #new line and extra spaces all gone

query3 <- gsub(pattern="[[:space:]]+",replacement=" ", cmd)
query3 #same as query2

该代码已在R版本3.5.1中进行测试。希望您可以检查代码并分享您的想法。

1 个答案:

答案 0 :(得分:0)

\s是一个空格字符,而不仅仅是文字空间。参见http://regular-expressions.info/shorthand.html

R的?regex中记录了[[:space]]字符类,以指示:“空格字符:制表符,换行符,垂直制表符,换页符,回车符,空格以及其他可能与语言环境相关的字符。” < / p>

仅仅为一个角色组成一个完整的班级就有些奇怪了。您可以在正则表达式中使用文字空间“”。