您可以split()
上的字符串"AND"
,然后在列表中的各项之间插入"AND
。似乎您也不需要任何尾随空格,因此也需要strip()
。
string = "events.error > 5 AND timeseries.temperature < 20 AND variants.battery = 'Li' AND vehicle.name = 'Audi'"
def intersperse(lst,item):
result = [item] * (len(lst) * 2 - 1)
result[0::2] = lst
return result
result = intersperse([x.strip() for x in string.split("AND")],"AND")
print(result)
输出:
['events.error > 5','AND','timeseries.temperature < 20',"variants.battery = 'Li'","vehicle.name = 'Audi'"]
,
最简单的方法是使用re.split
,将分隔符放在一组中将使其保留在输出中:
import re
string = "events.error > 5 AND timeseries.temperature < 20 AND variants.battery = 'Li' AND vehicle.name = 'Audi'"
re.split(r'(AND)',string)
输出:
['events.error > 5 ',' timeseries.temperature < 20 '," variants.battery = 'Li' "," vehicle.name = 'Audi'"]
编辑:当您包含第二个分隔符“或”时,更新版本:
import re
string = "events.error > 5 AND timeseries.temperature < 20 OR variants.battery = 'Li' AND vehicle.name = 'Audi'"
re.split(r'(AND|OR)','OR'," vehicle.name = 'Audi'"]
如果要消除字符串周围的空格,可以在分隔符中但在组之外包含任意数量的前导和尾随空格,这样它们就不会出现在输出中:
import re
string = "events.error > 5 AND timeseries.temperature < 20 OR variants.battery = 'Li' AND vehicle.name = 'Audi'"
re.split(r'\s*(AND|OR)\s*',string) # include the spaces in the separator,# but don't keep them
输出:
['events.error > 5',"vehicle.name = 'Audi'"]
,
您可以先用string.split("AND")
分割字符串,再用.strip()
分割字符串,以丢失前导/尾随空格:
my_string = "events.error > 5 AND timeseries.temperature < 20 AND variants.battery = 'Li' AND vehicle.name = 'Audi'"
my_list = my_string.split('AND')
my_list = [x.strip() for x in my_list]
print(my_list)
返回
['events.error > 5',"vehicle.name = 'Audi'"]
请注意,如果没有.strip()
,则会保留不必要的空白,而这可能是您不希望的。
,
您可以将split()
与itertools.cycle()
和zip()
组合:
import itertools
string = "events.error > 5 AND timeseries.temperature < 20 AND variants.battery = 'Li' AND vehicle.name = 'Audi'"
print([x for y in zip(string.split(' AND '),itertools.cycle(['AND'])) for x in y][:-1])
# ['events.error > 5',"vehicle.name = 'Audi'"]
本文链接:https://www.f2er.com/2954098.html