Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用正则表达式拆分列表元素_Python_Regex_Python 2.7 - Fatal编程技术网

Python 如何使用正则表达式拆分列表元素

Python 如何使用正则表达式拆分列表元素,python,regex,python-2.7,Python,Regex,Python 2.7,鉴于这一名单: ['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1 -111', '-1 +103', u'91', u'93'] 我想在空格中拆分+1-111,-1+103,以获得以下结果: ['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1', '-111', '-1', '+103', u'91', u'93'] 这是我需要的正则表达式: (?<=\

鉴于这一名单:

['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1 -111', '-1 +103', u'91', u'93']
我想在空格中拆分
+1-111
-1+103
,以获得以下结果:

['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1', '-111', '-1', '+103', u'91', u'93']
这是我需要的正则表达式:

(?<=\d)\s(?=[-+]\d\d\d)

(?不确定这是否是最有效的方法,但是:

output = []
for x in input:
    if re.search('(?<=\d)\s(?=[-+]\d\d\d)', x):
        output += x.split(" ")
output=[]
对于输入中的x:

如果使用现有的
re
重新搜索(“(?),则可以使用以下方法来平展单个元素拆分:

import re
from itertools import chain

some_list = ['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1 -111', '-1 +103', u'91', u'93']
print list(chain.from_iterable(re.split('(?<=\d)\s(?=[-+]\d\d\d)', s) for s in some_list))
# ['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1', '-111', '-1', '+103', u'91', u'93']
重新导入
来自itertools进口链
一些清单=['MIA','BOS','08:17 AM','-107','-103','08:17 AM','+1-111','-1+103',u'91',u'93']

打印列表(链自可拆分)(关于拆分(')(?这里有一个使用列表理解的选项:

import re

lst = ['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1 -111', '-1 +103', u'91', u'93']
result = [s for x in lst for s in re.split(r'(?<=\d)\s(?=[-+]\d\d\d)', x)]
或要就地修改列表,请执行以下操作:

for i in range(len(lst)-1, -1, -1):
    lst[i:i+1] = re.split(r'(?<=\d)\s(?=[-+]\d\d\d)', lst[i])
范围内的i(len(lst)-1,-1,-1):

lst[i:i+1]=re.split(r’(?使用生成器可以非常有效,特别是对于巨大的输入,如果您打算在迭代后丢弃结果(并且比使用中间列表更优雅):

对于示例输入:

>>> l = ['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', 
         '+1 -111', '-1 +103', u'91', u'93']

>>> list(split_elements(l, r'(?<=\d)\s(?=[-+]\d\d\d)'))
['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1', '-111', '-1',
 '+103', u'91', u'93']
>>l=['MIA','BOS','08:17 AM','-107','-103','08:17 AM',',
“+1-111',”-1+103',u'91',u'93']
>>>列表(拆分元素(l,r’(?
)从可编辑(imap)重新编译(r’(?)?
def split_elements(list_, regex):
    for element in list_:
        for sub_element in re.split(regex, element):
            yield sub_element

output = [x for x in split_elements(input, regex)]
>>> l = ['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', 
         '+1 -111', '-1 +103', u'91', u'93']

>>> list(split_elements(l, r'(?<=\d)\s(?=[-+]\d\d\d)'))
['MIA', 'BOS', '08:17 AM', '-107', '-103', '08:17 AM', '+1', '-111', '-1',
 '+103', u'91', u'93']