grep \s 返回空白

grep \s returning blank

语言:R,IDE:R Studio

我正在编写一个脚本来从 pdf 文件中提取和排除特定信息(a.k.a 一个巨大的字符串)。我使用 grep 将字符串拆分为我想要的页面。我希望进一步缩小它。我的进一步瘦身脚本是...

variablename <- grep("Additional Information:(?! )", AnyAdditionalInfoPages,   
     perl = TRUE, value = TRUE)

这完全符合我的要求。然而,我是 R 和正则表达式的新手,所以我想练习并尝试了以下方法...

variablename <- grep("Additional Information:(?!\s)", AnyAdditionalInfoPages, 
    perl = TRUE, value = TRUE)

结果是 - 错误:'\s' 是在以“"Additional Information:(?!\s"

开头的字符串中无法识别的转义符

variablename <- grep("Additional Information:(?!\s)", AnyAdditionalInfoPages, 
    perl = TRUE, value = TRUE)

结果是一个空变量

> variablename
character(0)

这是怎么回事?为什么 " " 有效,但字符串 \s 的转义字符无效?

啊,这是一个有趣的问题。

模式 "Additional Information:(?! )" 不会 select 个包含“:”后的单个 space 的字符串,但使用 (?!\s) 不会 select 个包含单个 space 的字符串任意 白色space 字符,例如制表符。一种可能的解释是,您正在解析的向量中有 "non-space" 形式的白色 space。

AnyAdditionalInfoPages <- c("Additional Information: page 20", # one space
                            "Additional Information:  page 7", # two spaces
                            "Additional Information:\tpage 50", # tab
                            "Additional Information:\npage 60") # newline

# Print vector to observe true formatting
cat(AnyAdditionalInfoPages)

# Output:
Additional Information: page 20
Additional Information:  page 7
Additional Information:       page 50
Additional Information:
page 60


# Negative lookahead for spaces *only*
variablename <- grep("Additional Information:(?! )", AnyAdditionalInfoPages,   
                     perl = TRUE, value = TRUE)
# Output
[1] "Additional Information:\tpage 50"  "Additional Information:\npage 60"

# Negative lookahead for *any* whitespace
variablename <- grep("Additional Information:(?!\s)", AnyAdditionalInfoPages,   
                     perl = TRUE, value = TRUE)
# Output
character(0)