【问题标题】:Multiple punctuation stripping多个标点剥离
【发布时间】:2012-09-12 06:02:57
【问题描述】:

我在这里尝试了多种解决方案,尽管它们剥离了一些代码,但它们似乎不适用于多个标点符号。 “[ 或者 ', 这段代码:

regex = re.compile('[%s]' % re.escape(string.punctuation))
    for i in words:
        while regex.match(i):
            regex.sub('', i)

我来自: Best way to strip punctuation from a string in Python 很好,但我仍然遇到双标点的问题。 我添加了While 循环,希望对每个单词进行迭代以删除多个标点符号,但这似乎不起作用,它只是卡在第一项“[并且没有退出它

我只是错过了一些明显的部分,我也只是忘记了吗?

我通过添加冗余和双循环我的列表解决了这个问题,由于相当大的集合,这需要很长时间(甚至几分钟)

我使用 Python 2.7

【问题讨论】:

  • 你能在regex.sub('',???) 不起作用的地方添加一个示例字符串吗? (也就是说,填写???)。
  • 不确定您要说实话,用示例字符串代替 i?
  • 是的,这就是我要的。对我来说,看起来你拥有的正则表达式/子应该可以工作......一个显示它失败的具体例子会很有帮助。
  • 我在 regex.sub('', i) 上面添加了 print i 并导致无限 [" 必须控制 C 出来。我测试了标点符号集,两项都包括在内。我很困惑
  • 所以它遇到问题的字符串是["——因为你使用的re将'["'变成''没有问题(至于无限循环,请查看答案@LukasGraf)。

标签: python regex string punctuation


【解决方案1】:

您的代码不起作用,因为regex.match 需要字符串的开头完整 字符串来匹配。

另外,您没有对regex.sub() 的返回值做任何事情。 sub 不起作用,但您需要将其结果分配给某物。

regex.search 如果在字符串中的任何位置找到该模式并按预期工作,则返回匹配项:

import re
import string

words = ['a.bc,,', 'cdd,gf.f.d,fe']

regex = re.compile('[%s]' % re.escape(string.punctuation))
for i in words:
    while regex.search(i):
        i = regex.sub('', i)
    print i

编辑:正如@senderle 所指出的,while 子句不是必需的,可以完全省略。

【讨论】:

  • 哦,对了。 拍打额头。但是——在那种情况下,while 子句是否必要?为什么不直接打电话给sub
  • @senderle 好点,你说得对,while 子句是不必要的。
  • 还是不行,我加了 if regex.search(i) 你的 print i 在哪里,它仍然输入 if 语句,我什至不知道这怎么可能
  • @rodling 您是否还阅读了我关于分配 re.sub 的返回值的评论?注意我的代码中的i = ...
  • @rodling,那么您在我们看不到的代码的另一部分也做错了。我发布的代码有效,如果你用if regex.search(i): ... 替换该sn-p 中的print i,它将不会 进入该if 语句。您能否将您的问题简化为一个可执行且包含一些数据的测试用例,并说明为什么它没有按应有的方式运行?
【解决方案2】:

这将替换所有不是字母数字的...

re.sub("[^a-zA-Z0-9 ]","",my_text)


>>> re.sub("[^a-zA-Z0-9 ]","","A [Black. Cat' On a Hot , tin roof!")
'A Black Cat On a Hot  tin roof'

【讨论】:

    【解决方案3】:

    这是一个简单的方法:

    >>> print str.translate("My&& Dog's {{{%!@#%!@#$L&&&ove Sal*mon", None,'~`!@#$%^&*()_+=-[]\|}{;:/><,.?\"\'')
    >>> My Dogs Love Salmon
    

    使用这个 str.translate 函数将消除标点符号。我通常用它来消除 DNA 序列读数中的数字。

    【讨论】:

      猜你喜欢
      • 2014-03-16
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2013-07-11
      • 2014-12-20
      • 1970-01-01
      相关资源
      最近更新 更多