从字符串中创建两个列表,这些字符串在方括号之间包含和不包括

支持我们有一个像这样的字符串:

s = u'apple banana lemmon (hahaha) dog cat whale (hehehe) red blue black'

我要创建以下列表:

including = ['hahaha', 'hehehe']
excluding = ['apple banana lemmon (', ') dog cat whale (', ') red blue black']

第一个列表是直接使用正则表达式:

including = re.findall('\((.*?)\)',s)

但是我无法为其他列表获得类似的信息。你可以帮帮我吗?先感谢您!!


皈依舞
浏览 123回答 3
3回答

MM们

excluding = re.split('|'.join(including), s)对于您知道包含信息将不包含特殊字符或正则表达式定义的简单情况。如果您不确定是否会出现这种情况:re.split('|'.join(map(re.escape, including)), s)这将转义特殊的正则表达式字符,否则将导致re.split函数功能异常

叮当猫咪

使用正则表达式a = re.findall('\)?[^()]*\(?', s)excluded = a[::2]included = a[1::2]print(included, excluded, sep='\n')['hahaha', 'hehehe', '']['apple banana lemmon (', ') dog cat whale (', ') red blue black']照顾空字符串a = re.findall('\)?[^()]*\(?', s)excluded = [*filter(bool, a[::2])]included = [*filter(bool, a[1::2])]print(included, excluded, sep='\n')['hahaha', 'hehehe']['apple banana lemmon (', ') dog cat whale (', ') red blue black']没有正则表达式from itertools import cycledef f(s):  c = cycle('()')  a = {'(': 1, ')': 0}  while s:    d = next(c)    i = s.find(d)    if i > -1:      j = a[d]      yield d, s[:i + j]      s = s[i + j:]    else:      yield d, s      breakincluded = []excluded = []for k, v in f(s):  if k == '(':    excluded.append(v)  else:    included.append(v)print(included, excluded, sep='\n')['hahaha', 'hehehe']['apple banana lemmon (', ') dog cat whale (', ') red blue black']相同想法但不覆盖 sfrom itertools import cycledef f(s):  c = cycle('()')  a = {'(': 1, ')': 0}  j = 0  while True:    d = next(c)    i = s.find(d, j)    if i > -1:      k = a[d]      yield d, s[j:i + k]      j = i + k    else:      yield d, s[j:]      breakincluded = []excluded = []for k, v in f(s):  if k == '(':    excluded.append(v)  else:    included.append(v)print(included, excluded, sep='\n')['hahaha', 'hehehe']['apple banana lemmon (', ') dog cat whale (', ') red blue black']

胡子哥哥

您可以使用正向后视和正向前瞻来拆分括号之间的单词:>>> re.split(r'(?<=\().*?(?=\))', s)['apple banana lemmon (', ') dog cat whale (', ') red blue black']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python