给定一个字符串:
str = "apple AND orange OR banana"
我想要按照"AND"或者"OR"拆分它。期望的结果是
['apple', 'orange', 'banana']
有没有一种简单的方法可以在Python中实现呢?
谢谢!
>>> tr = "apple AND orange OR banana"
>>> re.split(r'[A-Z]+',tr)
['apple ', ' orange ', ' banana']
但如果您只想使用AND
或OR
进行拆分:
>>> re.split(r'AND|OR',tr)
['apple ', ' orange ', ' banana']
如果您确定句子中包含不同的单词,可以使用以下方法删除空格:
>>> re.split(r'[A-Z ]+',tr)
['apple', 'orange', 'banana']
AND
或OR
,使用split方法会在结果中创建一个空字符串。为了去掉这个空字符串,你可以循环遍历分割后的列表并检查每个元素是否有效。但更优雅的方式是使用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']
'\s+(AND|OR)\s+'
,空格也被去掉了;-) - dhke?
但是我修正了答案!更好了! - MazdakIn [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']
或者
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']
for
循环,这是我能想到的最干净的方法。 - James Mertzs = "apple AND orange OR banana"
print([word for word in s.split() if word not in {"AND","OR"}])
['apple', 'orange', 'banana']
filter
和re.split
呢:my_list = list(filter(None, re.split("\s*(?:AND|OR)\s*", my_str)))
str 是一个非常糟糕的变量名,因为它是内置的。
这将输出:
['apple', 'orange', 'banana']
str
作为变量名。str
是一个众所周知的内置函数,如果覆盖它,将会引发各种问题。请使用其他名称来命名你的变量。 - dhke