【问题标题】:Spliting strings surrounded by special characters拆分被特殊字符包围的字符串
【发布时间】:2014-09-04 18:35:58
【问题描述】:

我有一个如下所示的输入。

word1-word2
word1 word2
word1+word2
--word1--word2-
word1-word2 
word1,word2,
(word1),word2

我必须创建一个最终包含 ['word1','word2'] 的列表 没有别的了。 (我猜它可以有空白,我可以稍后删除)。这两个词周围可以有任何特殊字符。有没有直接的方法可以做到这一点? (更好的正则表达式??)。

我正在尝试以下链接中的以下几行

Splitting a string with multiple delimiters in Python

re.split(r'[-+ ,]+', INPUT)

这两个词周围的特殊字符之间没有任何一致性。

【问题讨论】:

  • 为什么不直接从结果中去掉空字符串。
  • 我已经提到了我的问题.. 它可以有空格,我想我以后可以删除)
  • @simonzack 我是否因此而被否决?
  • 你现在的代码是不是不能工作?还是不够直接?还是什么?
  • @Ank 是的,我认为这是一个相当微不足道的问题,如果您想使用单个 split 执行此操作,您应该在问题中这么说。

标签: python regex list split


【解决方案1】:

听起来您真正想做的是从可能包含特殊字符的字符串中提取单词。因此,只需寻找单词:

re.findall(r'\w+', text)

>>> re.findall(r'\w+', "word1,word2,")
['word1', 'word2']
>>> re.findall(r'\w+', "(word1),word2")
['word1', 'word2']
>>> re.findall(r'\w+', "--word1--word2-")
['word1', 'word2']

re.findall 将创建一个正则表达式匹配列表。

正则表达式中的

\w 是所有字母数字字符以及下划线的特殊简写(相当于[a-zA-Z0-9_])。所以这个解决方案的一个警告是,如果你有类似word1_word2的东西,你会得到['word1_word2']

如果不需要,请使用以下正则表达式:[a-zA-Z0-9]+

【讨论】:

  • 为什么要多出括号?
  • 这样解释会更好:为什么使用\w比“尝试命名我能想到的每个特殊字符”更好,以及为什么使用findall而不是@987654330来查找单词@ 拆分非单词解决了有用的之前和/或之后的额外空白值的问题。
  • 啊,因为我最初的回答类似于[a-zA-Z0-9]。只是忘了删除它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
相关资源
最近更新 更多