8
我遇到與perl的表達\\L\\1
困難在R-dev的非常特別的情況下(2017年6月6日和2017年6月16日r72796版本):R 3.5.0支持正則表達式\ L嗎?
bib <- readLines("https://raw.githubusercontent.com/HughParsonage/TeXCheckR/master/tests/testthat/lint_bib_in.bib", encoding = "UTF-8")
leading_spaces <- 2
is_field <- grepl("=", bib, fixed = TRUE)
field_width <- nchar(trimws(gsub("[=].*$", "", bib, perl = TRUE)))
widest_field <- max(field_width[is_field])
out <- bib
# Vectorized gsub:
for (line in seq_along(bib)){
# Replace every field line with
# two spaces + field name + spaces required for widest field + space
if (is_field[line]){
spaces_req <- widest_field - field_width[line]
out[line] <-
gsub("^\\s*(\\w+)\\s*[=]\\s*\\{",
paste0(paste0(rep(" ", leading_spaces), collapse = ""),
"\\L\\1",
paste0(rep(" ", spaces_req), collapse = ""),
" = {"),
bib[line],
perl = TRUE)
}
}
# Add commas:
out[is_field] <- gsub("\\}$", "\\},", out[is_field], perl = TRUE)
out[9]
#> R-dev " author"
#> R 3.4.0 " author = {Tony Wood and Amélie Hunter and Michael O'Toole and Prasana Venkataraman and Lucy Carter},"
要重現,它是必要的:
- 從
readLines
從一個文件,並指定編碼。 (使用dput
將不會重現) - 在perl正則表達式中使用
\\L
或\\U
。 - 要使用的字符
- 的向量要具有需要UTF-8(E在天使愛美麗在上述),該向量的元素
這是中的R 3.5.0的變化,或者有在這種情況下,我一直在誤用\\L
?
瞧,你已經被警告:[*它可能包含的錯誤,所以要小心,如果你使用它。*](https://cran.r-project.org /bin/windows/base/rdevel.html)。 –
我無法構建代碼段 - 什麼是'leading_spaces'? –
這個特定的錯誤是在一個包的R CMD檢查中導致錯誤。對不起,我編輯過。 – Hugh