【问题标题】:Substring detection for 1st word第一个单词的子串检测
【发布时间】:2019-04-11 23:57:29
【问题描述】:

我正在检测报告中的子字符串,然后在报告末尾添加后缀词,具体取决于子字符串是否存在。较短的单词很危险,因为它们通常是较长单词的一部分。示例:ear 和 overbearing。空格键往往是一个合理的解决方案。因此,我将使用“ear”而不是搜索子字符串“ear”。注意子字符串前面的空格。并且子字符串末尾没有空格,因为我不想错过复数 ears。 问题是当整个报告中的第一个词是 Ear 时。没有前导空白。

我尝试使用库 stringr 解决问题,但在每个报告的开头添加了一个空格,但文本返回不变。

(stringr)
Data$Fail <- str_pad(Data$text, width = 1, side = "left")

【问题讨论】:

  • 为什么不有条件地处理第一个单词的问题?
  • 使用^(ear) 之类的东西在行首查找ear 组,感谢^
  • 使用正则表达式库,它会帮助你找到你想要的任何模式的文本。

标签: r regex string substring stringr


【解决方案1】:

Data$Fail &lt;- str_pad(Data$text, width = 1, side = "left") 不起作用,因为 str_pad() 将字符串填充到固定长度,您将其指定为 width = 1,因此它只会在文本最初为空。

但如果您只想在字符串的开头插入一个空格,则不需要特殊的库 - text = paste("", text) 就可以。

【讨论】:

    【解决方案2】:

    Armali 已经回答了您的问题(使用paste('',text))在耳前添加一个空格。由于您还想在句子的开头匹配耳朵,因此您可以更好地使用 HO LI Pin 指出的正则表达式。

    pattern <- '(?<![A-z])[Ee]ar'
    

    这只会匹配 E/ear 如果 not 前面有任何其他字母(因此它仍然可以前面有 _( 等,但从不清楚您的问题是否允许。然后您可以使用基本 R 或更简单的 stringr 库使用此正则表达式模式搜索所有匹配项:

    library(stringr)
    pattern <- '(?<![A-z])[Ee]ar'
    text = 'Ear this is some nice text as you can hear with your ear about overbearing'
    
    unlist(str_extract_all(text, pattern, simplify = FALSE))
    

    这会给你:

    [1] "Ear" "ear"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多