1

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

简而言之,我使用 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 中进行了测试。希望您可以检查代码并分享您的想法。

4

1 回答 1

0

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

并且[[:space]]字符类记录在 R 中的 ?regex 中以指示:“空格字符:制表符、换行符、垂直制表符、换页、回车、空格和可能的其他与语言环境相关的字符。”

只为一个角色组成一整个班级会有些奇怪。您可以在正则表达式中使用文字空格“”。

于 2018-10-30T21:54:35.640 回答