【问题标题】:remove hyphenation at the end of line only regex python r仅在行尾删除连字符正则表达式 python r
【发布时间】:2021-03-01 23:09:18
【问题描述】:

我有一堆 PDF 文件(基于文本和扫描)来读取文本。在某些情况下,长词在行尾连字符。附上示例文本:

仅当这些连字符位于行尾时,我才需要清除它们。也就是说,我想保留所有标点符号和连字符,否则。所以在这个例子中,The-example-text 应该保持原样,但是在清除换行符和连字符之后,我想得到 PersönlichkeitGemeinschaftFähigkeiten 没有连字符和没有空格而不是连字符。

我在 R 中所做的是:

gsub("-\n\n|-\n|- \n", "", txt)

但这并不总是有效。 这样做的优雅方式是什么?

【问题讨论】:

    标签: python r regex


    【解决方案1】:

    您可以尝试摆弄gsubfn::gsubfn 来区分连字符是连接两个单词还是仅包含一个单词:

    gsubfn(pattern = "-\\n\\s*[A-Z]?", replacement = function(x) {
      if (grepl(pattern = "[A-Z]", x = x)) {
        gsub("\\n\\s?|\\n\\s+", "", x)
      } else {
        gsub("-\\n\\s?", "", x)
      }
    }, x = x)
    

    【讨论】:

      【解决方案2】:

      这会为你做的:

      -\s*$\s+
      
      • -\s*$ - 捕获-,在行尾带有可选空格
      • \s+ - 捕获破折号后的任何空格(包括新行)

      在您的替换中,只需替换为空字符串即可。

      如果上述内容在 R 中不兼容,那么这应该是每个 http://www.endmemo.com/r/gsub.php:

      -[[:space:]]*$[[:space:]]+
      

      https://regex101.com/r/hTaKYC/1

      【讨论】:

      • 在 R 中我不认为\s 被识别,应该替换为-[:blank:]*$
      • 为什么你必须把\s放到一个字符类中?
      • @Onyambu Botched 编辑,它曾经是[\r\n]。虽然它是固定的......
      • @Alexlok yes \s 在 R 中被识别。R 默认使用 POXIS 引擎,并且在用户声明时也使用 PCRE。唯一的问题是您必须像在许多其他语言中一样转义反斜杠。
      • @Alexlok python 被标记,所以我认为这没问题。
      【解决方案3】:

      你可以试试这个

      import re
      
      # replace all '-\n','- \n', '-  \n', '-\n\n'
      result = re.sub(r'- *\n+','', text)
      

      【讨论】:

        【解决方案4】:

        删除后跟可选空格的任何连字符,然后是任意数量的行尾:

        gsub("-\\h*\\R+", "", txt, perl=TRUE)
        library(stringr)
        stringr::str_replace_all(txt, "-\\h*\\R+", "")
        

        proof

        说明

        --------------------------------------------------------------------------------
          -                        '-'
        --------------------------------------------------------------------------------
          \h*                      horizontal whitespace, 0 or more times
        --------------------------------------------------------------------------------
          \R+                      any line ending (1 or more times)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-22
          • 2015-09-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多