python字符串拆分为单个字符_求一个根据成对符号拆分字符串的python脚本

展开全部

下面的函数实现将你所说的字符串转换成一个列表e68a84e8a2ad62616964757a686964616f31333335336536,列表每个元素是符合你要求的字符串。 如果你能确保输入的字符串里的符号(括号,<>等)一定是成对匹配出现的,那么可以把源码中的 raise Exception 相关的代码删除掉。那几行都是在符号不成对的时候报错用的。

symbol_L = ['{', '(', '[', '

symbol_R = ['}', ')', ']', '>',]

def my_split(text):

retlist = []

stack = []

msg = []

for c in text:

if c == ' ' and len(stack) == 0:

if len(msg) > 0:

retlist.append(''.join(msg))

msg = []

continue

msg.append(c)

if c in symbol_L:

stack.append(c)

continue

for idx, symbol in enumerate(symbol_R):

if c != symbol:

continue

if len(stack) == 0 or stack[-1] != symbol_L[idx]:

raise Exception("Unballanced symbols")

stack.pop()

if len(stack) == 0:

retlist.append(''.join(msg))

msg = []

break

if len(stack) > 0:

raise Exception("Unballanced symbols")

return retlist

使用的方法很简单:

>>> my_split("(aaa ) {bbb} [ccc ppp]  eee zzz ")

['(aaa )', '{bbb}', '[ccc ppp]', '', 'eee', 'zzz', '']

想知道哪个字符串是没有被符号括起来的也很简单,用下面的代码即可:result = my_split("(aaa ) {bbb} [ccc ppp]  eee zzz ")

for i, w in enumerate(result):

if w[0] not in symbol_L:

print 'word %s at index %d is not enclosed' % (w, i)

可以看到类似于

word eee at index 4 is not enclosed

word zzz at index 5 is not enclosed

的打印。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值