【问题标题】:Python re adding space when splittingPython在拆分时重新添加空间
【发布时间】:2017-01-30 03:18:03
【问题描述】:

我正在使用以下正则表达式将作为字符串传入的短语拆分为单词列表。

因为可能还有其他字母,所以我使用的是 UTF 标志。这在大多数情况下都很有效:

phrase = 'hey look out'
word_list = re.split(r'[\W_]+', unicode(phrase, 'utf-8').lower(), flags=re.U)
word_list [u'hey', u'look', u'out']

但是,如果该短语是一个以这样的句点结尾的句子,它将在列表中创建一个空白值:

phrase = 'hey, my spacebar_is broken.'
word_list [u'hey', u'my', u'spacebar', u'is', u'broken', u'']

我的解决方法是使用 re.split(r'[\W_]+', unicode(phrase.strip('.'), 'utf-8').lower(), flags=re.U) 但我想知道有没有办法在正则表达式中解决它?

【问题讨论】:

标签: python regex


【解决方案1】:

\W 选择非单词字符。由于. 是一个非单词字符,字符串在其上被分割。由于句号之后没有任何内容,因此您会得到一个空字符串。如果你想避免这种情况,你需要去掉字符串末尾的分隔符

phrase = re.sub(r'^[\W_]+|[\W_]+$', '', phrase)

或过滤结果数组以删除空字符串。

word_list = [word for word in word_list if word]

或者,您可以通过直接匹配而不是拆分来获取单词:

words = re.findall(r'[^\W_]+', phrase)

【讨论】:

  • 使用findall 方法比尝试使用sub 干净得多。它默认返回一个列表,这是我想要的并且错误地认为我需要split 才能返回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2020-05-15
  • 2016-05-22
  • 2019-03-03
  • 1970-01-01
  • 2018-03-13
相关资源
最近更新 更多