【问题标题】:removing left hand side parenthesis in str_split in r删除 r 中 str_split 中的左括号
【发布时间】:2014-06-04 05:50:21
【问题描述】:

如何在 R 中完成这项工作?

str_split("U.S. (California, San Luis Obispo County)",pattern=' (')

gregexpr("(", "U.S. (California, San Luis Obispo County)", fixed = FALSE, : 无效的正则表达式 '(',原因 'Missing ')''

gregexpr("(", "U.S. (California, San Luis Obispo County)")

gregexpr("(", "U.S. (California, San Luis Obispo County)") 中的错误: 无效的正则表达式 '(',原因 'Missing ')''

gregexpr("(", "U.S. (California, San Luis Obispo County)",perl=T)

gregexpr("(", "U.S. (California, San Luis Obispo County)", perl = T) 中的错误: 无效的正则表达式'('

另外,警告信息:

In gregexpr("(", "U.S. (California, San Luis Obispo County)", perl = T) :
  PCRE pattern compilation error
    'missing )'
    at ''

【问题讨论】:

  • 括号里没有逃过的问题是:pattern = "\\("?括号在正则表达式中是特殊的。
  • 你在第一个例子中写str_split的时候会提到strsplit函数吗?
  • 您能否添加问题中预期的输出以更好地了解您想要的内容?

标签: regex r strsplit stringr


【解决方案1】:

要使用“(”之类的特殊字符进行拆分,您必须对其进行转义。要在 R 中转义正则表达式,您必须使用双“\”,一个用于 R 字符串,另一个用于正则表达式,正如 Hugh 所建议的那样。那么您的模式应该是“\(”。有关更多信息,请参阅regex doc

下面的代码完成了这项工作

raw_string <- "U.S. (California, San Luis Obispo County)"
splitted_string <- strsplit(x=raw_string, split="\\(")

splitted_string

#[[1]]
#[1] "U.S. "                              
#[2] "California, San Luis Obispo County)"

但我不确定这就是你想要的。如果您的目标是删除字符串中的左括号,请使用带有空替换模式的 gsub

raw_string <- "U.S. (California, San Luis Obispo County)"
no_parenthesis_string <- gsub(pattern="\\(", replacement="", x= raw_string)
no_parenthesis_string 
# [1] "U.S. California, San Luis Obispo County)"

有帮助吗?

【讨论】:

    【解决方案2】:
    gsub("\\\\(","",c("U.S. (California, San Luis Obispo County)"))
    

    paste0(strsplit(c("U.S. (California, San Luis Obispo County)"), "\\(")[[1]], collapse = "")
    

    回答: “美国加利福尼亚州,圣路易斯奥比斯波县)”

    【讨论】:

      猜你喜欢
      • 2017-03-25
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 2021-10-05
      • 2022-01-21
      相关资源
      最近更新 更多