【问题标题】:python regex to replace all single word characters in stringpython 正则表达式替换字符串中的所有单个单词字符
【发布时间】:2017-06-23 07:26:43
【问题描述】:

我正在尝试删除字符串中的所有单个字符

输入:“这是一辆大车,座位很宽敞”

我的输出应该是:

输出:“这辆车很大,座位很宽敞”

这里我用的是表达式

import re
re.compile('\b(?<=)[a-z](?=)\b')

这与字符串中的第一个单个字符匹配...

任何帮助将不胜感激......提前致谢

【问题讨论】:

  • lookarounds 在这里看起来是多余的,因为它们匹配一个空模式并且总是返回 true。您是否使用re.sub 的模式? re.sub(r'\b[a-zA-Z]\b', '', s) 应该在一定程度上移除 all 单字母单词
  • 没有正则表达式' '.join(word for word in strng.split(' ') if len(word) &gt; 1)
  • @Chris_Rands:例如,这也会删除单个数字。
  • @Chris_Rands:它还删除了孤立的标点符号。
  • @WiktorStribiżew 从OP的问题中不清楚,当然islpha()isdigit()等检查是可能的

标签: python regex django


【解决方案1】:

编辑:我刚刚看到这是 Wiktor Stribiżew 在 cmets 中首先提出的。归功于他 - 我在发布时没有看到。

您还可以使用re.sub() 自动删除单个字符(假设您只想删除字母字符)。以下内容将替换任何出现的单个字母字符:

import re
input =  "This is a big car and it has a spacious seats"

output =  re.sub(r"\b[a-zA-Z]\b", "", input)

>>>
output = "This is  big car and it has  spacious seats"

您可以在此处了解有关替换字符串时输入正则表达式的更多信息:How to input a regex in string.replace?

【讨论】:

  • @Ravi 再说一遍,我在写这篇文章时没有看到 Wiktor Stribizew 的评论。很高兴我们能够提供帮助。
【解决方案2】:

这是一种方法,通过拆分字符串并使用lenstr.isalpha过滤单个长度的字母:

>>> s = "1 . This is a big car and it has a spacious seats"
>>> ' '.join(i for i in s.split() if not (i.isalpha() and len(i)==1))
'1 . This is big car and it has spacious seats'

【讨论】:

    【解决方案3】:
    re.sub(r' \w{1} |^\w{1} | \w{1}$', ' ', input)
    

    【讨论】:

      【解决方案4】:

      编辑

      你可以使用:

      import re
      input_string = "This is a big car and it has a spacious seats"
      str_without_single_chars = re.sub(r'(?:^| )\w(?:$| )', ' ', input_string).strip()
      

      或者(我注意到了,不符合规范):

      input_string = "This is a big car and it has a spacious seats"
      ' '.join(w for w in input_string.split() if len(w)>3)
      

      【讨论】:

      • 复制粘贴评论作为答案是不公平的。
      • ...不符合当前规范。
      • 阅读问题下方的cmets,你会看到。
      【解决方案5】:

      删除两个已知标签或字符串中两个已知字符之间的单词、字符、字符串或任何内容的最快方法是使用直接和 Native C 方法,使用 RE 和 Common,如下所示。

      var = re.sub('<script>', '<!--', var)
      var = re.sub('</script>', '-->', var)
      #And finally
      var = re.sub('<!--.*?-->', '', var)
      

      与 Beautiful Soup 相比,它可以去除所有东西,而且运行速度更快、效果更好、更清洁。 批处理文件是“”开始的地方,仅被借用用于本机 C 中的批处理和 html”。当使用带有正则表达式的所有 Pythonic 方法时,您必须意识到 Python 并没有改变或改变所有使用的正则表达式通过机器语言,那么当单个循环可以在一次迭代中将其全部作为一个块找到时,为什么要进行多次迭代呢?对 Characters 也单独执行相同的操作。

      var = re.sub('\[', '<!--', var)
      var = re.sub('\]', '-->', var)
      And finally
      var = re.sub('<!--.*?-->', '' var)# wipes it all out from between along with.
      

      而且你不需要美丽的汤。如果您了解其工作原理,您也可以使用它们来剥头皮数据。

      【讨论】:

        猜你喜欢
        • 2017-08-28
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 2012-12-04
        • 1970-01-01
        • 2020-01-15
        • 1970-01-01
        相关资源
        最近更新 更多