【问题标题】:Python: Regex SearchPython:正则表达式搜索
【发布时间】:2016-02-28 00:37:43
【问题描述】:

我想在多个分隔符上拆分一个句子:

.?!\n

但是,我想将逗号与单词一起保留。 例如对于字符串

'Hi, How are you?'

我想要结果

['Hi,', 'How', 'are', 'you', '?']

我尝试了以下方法,但没有得到所需的结果

words = re.findall(r"\w+|\W+", text)

【问题讨论】:

  • 我认为线索可能在您的问题中 - 尝试使用 re.split,例如re.split(r'\s+', text)?
  • 您是否希望仅在每个单词后面加上逗号?你对标点符号的标准是什么?什么时候分什么时候不分?
  • 如果你想保持昏迷,也许你可以试试这个:re.findall(r"\w+[,]*", t)
  • 我想在出现空格时拆分句子。由于逗号附加到单词hi,它应该与hi一起显示。然而,像“。”这样的分隔符。 “!” “?”出现在句尾的“换行符”应视为一个单词并拆分
  • 您的问题中应该包含该信息

标签: python regex delimiter


【解决方案1】:

re.split 并保留你的分隔符,然后过滤掉只包含空格的字符串。

>>> import re
>>> s = 'Hi, How are you?'
>>> [x for x in re.split('(\s|!|\.|\?|\n)', s) if x.strip()]
['Hi,', 'How', 'are', 'you', '?']

【讨论】:

    【解决方案2】:

    如果使用 re.findall:

    >>> ss = """
    ... Hi, How are
    ...
    ... yo.u
    ... do!ing?
    ... """
    >>> [ w for w in re.findall('(\w+\,?|[.?!]?)?\s*', ss) if w ]
    ['Hi,', 'How', 'are', 'yo', '.', 'u', 'do', '!', 'ing', '?']
    

    【讨论】:

      【解决方案3】:

      你可以使用:

      re.findall('(.*?)([\s\.\?!\n])', text)
      

      使用一点 itertools 魔法和列表推导:

      [i.strip() for i in itertools.chain.from_iterable(re.findall('(.*?)([\s\.\?!\n])', text)) if i.strip()]
      

      还有一个更容易理解的版本:

      words = []
      found = itertools.chain.from_iterable(re.findall('(.*?)([\s\.\?!\n])', text)
      for i in found:
          w = i.strip()
          if w:
              words.append(w)
      

      【讨论】:

      • 使用 re.findall('(.*?)([\s\.\?!\n])', text),我得到以下输出: [('hi,', ' '), ('如何', ' '), ('是', ' '), ('你', '?')]
      • 是的,接下来您必须过滤输出,但请参阅 timgeb 的答案以获得更好的版本。
      猜你喜欢
      • 2013-08-16
      • 2011-12-27
      • 2015-02-23
      • 2015-05-30
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多