为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

皈依舞 2021-05-30 10:58:13
支持我们有一个像这样的字符串: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)但是我无法为其他列表获得类似的信息。你可以帮帮我吗?先感谢您!!
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

excluding = re.split('|'.join(including), s)

对于您知道包含信息将不包含特殊字符或正则表达式定义的简单情况。

如果您不确定是否会出现这种情况:

re.split('|'.join(map(re.escape, including)), s)

这将转义特殊的正则表达式字符,否则将导致re.split函数功能异常


查看完整回答
反对 回复 2021-06-01
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

使用正则表达式

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 cycle


def 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

      break


included = []

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']

相同想法但不覆盖 s

from itertools import cycle


def 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:]

      break


included = []

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']


查看完整回答
反对 回复 2021-06-01
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以使用正向后视和正向前瞻来拆分括号之间的单词:


>>> re.split(r'(?<=\().*?(?=\))', s)

['apple banana lemmon (', ') dog cat whale (', ') red blue black']


查看完整回答
反对 回复 2021-06-01
  • 3 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号