Python:如何通过多个字符串拆分字符串

时间:2015-03-18 19:16:46

标签: python string split

给出一个字符串:

  

str =“apple AND orange OR banana”

我想用“AND”或“OR”拆分它。预期的结果是

  

['apple','orange','banana']

python有什么简单的方法吗?

谢谢!

4 个答案:

答案 0 :(得分:4)

您可以使用正则表达式基于len或1以上的任何大写字母组合进行拆分:

>>> tr = "apple AND orange OR banana"
>>> re.split(r'[A-Z]+',tr)
['apple ', ' orange ', ' banana']

但是,如果您只想与ANDOR分开:

>>> re.split(r'AND|OR',tr)
['apple ', ' orange ', ' banana']

如果你确定你的句子包含了不同的单词,你可以删除这些空格:

>>> re.split(r'[A-Z ]+',tr)
['apple', 'orange', 'banana']

如果使用split在字符串的前导或尾随中有ANDOR将在结果中创建一个空字符串,为了获得该字符串,您可以遍历已拆分列表并检查验证项目,但作为一种更优雅的方式,您可以使用re.findall: 以r'[^A-Z ]+'为模式:

>>> tr = "AND apple AND orangeOR banana"
>>> re.split(r'\s?(?:AND|OR)\s?',tr)
['', 'apple', 'orange', 'banana']
>>> re.split(r'[A-Z ]+',tr)
['', 'apple', 'orange', 'banana']
>>> [i for i in re.split(r'[A-Z ]+',tr) if i]
['apple', 'orange', 'banana']
>>> re.findall(r'[^A-Z ]+',tr)
['apple', 'orange', 'banana']

答案 1 :(得分:1)

我可以想到两种方法来实现这个目标:

In [230]: s = "apple AND orange OR banana"

In [231]: delims = ["AND", "OR"]

In [232]: for d in delims:
   .....:     s = s.replace(d, '-')
   .....:     

In [233]: s.split('-')
Out[233]: ['apple ', ' orange ', ' banana']

OR

In [234]: s = "apple AND orange OR banana"

In [235]: delims = ["AND", "OR"]

In [236]: for d in delims:
   .....:     s = s.replace(d, ' ')
   .....:     

In [237]: s.split()
Out[237]: ['apple', 'orange', 'banana']

答案 2 :(得分:1)

为什么不这样使用filterre.split

my_list = list(filter(None, re.split("\s*(?:AND|OR)\s*", my_str)))

即使在AND或OR位于字符串的最开头的情况下,这也会起作用。此外,您应该知道str是一个非常糟糕的变量名称,因为它是内置的。

这给出了输出:

['apple', 'orange', 'banana']

答案 3 :(得分:1)

您可以使用集合进行拆分和过滤:

s = "apple AND orange OR banana"

print([word for word in s.split() if word not in {"AND","OR"}])

['apple', 'orange', 'banana']