代码之家  ›  专栏  ›  技术社区  ›  WalliYo_

使用stringr::word获取除撇号外的特殊字符前的字符串

  •  1
  • WalliYo_  · 技术社区  · 9 月前

    字符串:

    text="Il n’a pas réussi à répondre à votre plainte/question et ne vous a pas orienté ailleurs"
    

    我想提取“/”之前的部分。我试过了

    word(text,sep="[[:punct:]]")
    [1] "Il n"
    

    在我的情况下,问题在于我有很多字符串,每个字符串都有不同的特殊字符。考虑到上面的例子,特殊字符是“/”,但也可以是“,”或“;”或“(”等。因此,我正在寻找一个全局解决方案。

    1 回复  |  直到 9 月前
        1
  •  2
  •   Konrad Rudolph    9 月前

    您的代码正在使用 任何 标点符号作为分隔符,以及 ’ 可作为标点符号。如果你想限制类别,可以将备选列表硬编码为字符类(例如。 [/,;(] )或者使用否定的前瞻来匹配所有标点符号 除了 撇号等。

    这是排除撇号的否定前瞻的解决方案。您可以根据需要添加其他字符;但是,请注意,撇号和(英语)单引号之间没有区别,至少在字符级别上没有区别。

    word(text, sep = '(?!’)[[:punct:]]')
    # [1] "Il n’a pas réussi à répondre à votre plainte"
    
        2
  •  0
  •   jkd    9 月前

    您可以将多个分隔符指定为向量、正则表达式列表,或者将它们与 | .

    texts=c("Il n’a pas réussi à répondre à votre plainte/question et ne vous a pas orienté ailleurs",
            "Il n’a pas réussi à répondre à votre plainte; question et ne vous a pas orienté ailleurs",
            "Il n’a pas réussi à répondre à votre plainte (question et ne vous a pas orienté ailleurs)")
    
    word(texts,sep=c("/",";","\\("))
    # [1] "Il n’a pas réussi à répondre à votre plainte"  "Il n’a pas réussi à répondre à votre plainte" 
    # [3] "Il n’a pas réussi à répondre à votre plainte "
    
    word(texts,sep="[/;\\(]")
    # [1] "Il n’a pas réussi à répondre à votre plainte"  "Il n’a pas réussi à répondre à votre plainte" 
    # [3] "Il n’a pas réussi à répondre à votre plainte "
    
    word(texts,sep="/|;|\\(")
    # [1] "Il n’a pas réussi à répondre à votre plainte"  "Il n’a pas réussi à répondre à votre plainte" 
    # [3] "Il n’a pas réussi à répondre à votre plainte "
    

    请注意,作为特殊正则表达式字符的分隔符(例如,!、(、{、…)必须用转义符转义 \\ .