【问题标题】:Strip single forward slash from text only in R仅在 R 中从文本中去除单个正斜杠
【发布时间】:2015-10-23 22:56:06
【问题描述】:

我正在尝试使用 R 仅从任何文本中删除 /。我尝试了不同的方法,但结果好坏参半。

这是我正在处理的文本s/p Left IOLI 3/9/04.

我正在尝试产生这样的输出sp Left IOLI 3/9/04.

只去除文本中的/,而不是数字。

这四个我都试过了

gsub("\", "", str, fixed=T) 
gsub("/", ".", str, fixed=T)
gsub("[^A-Za-z]", ".", str, perl =T)
str_replace( str, "/", "")

到目前为止,只有 gsub("[^A-Za-z]", ".", str, perl =T) 有效。吸盘将/ 从所有文本数字和所有内容中剥离。我只需要文本中的/ 消失。非常感谢任何帮助。

【问题讨论】:

  • 有疑问。假设您有 s/12 45/p s/p Left 是字符串。执行的输出是什么?
  • @akrun,好问题,我希望它会像这样出现s12 45p sp Left

标签: r string str-replace gsub


【解决方案1】:

我们可以使用正则表达式查找来删除不在数字之间的正斜杠。

gsub('(?<![0-9])/(?![0-9])', '', str, perl=TRUE)
#[1] "sp Left IOLI 3/9/04."

如果我们还需要在左侧或右侧包含非数字字符时删除/

gsub('(?<![0-9])/|/(?![0-9])', '', str1, perl=TRUE)
#[1] "sp Left IOLI 3/9/04." "s12 45p sp Left"     

数据

str <- 's/p Left IOLI 3/9/04.'
str1 <- c(str, 's/12 45/p s/p Left')

【讨论】:

    【解决方案2】:

    另一种方法是运行多个正则表达式。此处使用 stringr 包的 str_replace_all 进行了演示,但显然也可以使用基本函数。

    #First correct for / between 2 alphabets like s/p
    mystring <- str_replace_all(mystring, "([a-zA-Z])/([a-zA-Z])", "\\1\\2")
    
    #Next, correct for / between 1 alphabet and 1 number like s/12 or 45/p
    mystring <- str_replace_all(mystring, "([a-zA-Z])/([\\d])", "\\1\\2")
    mystring <- str_replace_all(mystring, "([\\d])/([a-zA-Z])", "\\1\\2")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多