【问题标题】:python - splitting a string without removing delimiterspython - 在不删除分隔符的情况下拆分字符串
【发布时间】:2013-05-10 20:20:57
【问题描述】:

我正在尝试在不删除分隔符的情况下拆分字符串,但这样做时遇到了麻烦。我要拆分的字符串是:

'+ {- 9 4} {+ 3 2}'

我想结束

['+', '{- 9 4}', '{+ 3 2}']

然而我尝试过的一切都没有奏效。我正在查看这篇 stackoverflow 帖子以及谷歌的答案:Python split() without removing the delimiter

谢谢!

【问题讨论】:

  • 大括号之间的值总是数字吗?
  • 嵌套卷曲怎么样?
  • 你能有嵌套的花括号,例如:'+ {+ 5 {- 7 2}} {+ 3 2}'吗?如果是这样,您希望在拆分中看到什么?这在我看来就像您正在尝试编写前缀符号算术表达式解析器。
  • 您可能会发现此讨论很有用:stackoverflow.com/questions/5307218/… - 是的,递归解析是正确的通用方法。
  • 如果我没记错我的理论,就不可能让正则表达式正确计算大括号之类的嵌套级别 - 您可能必须逐个字符地解析,自己跟踪堆栈深度,或者使用解析器生成器:stackoverflow.com/questions/133601/…

标签: python regex


【解决方案1】:

re.split 将在捕获时保留分隔符,即用括号括起来:

import re
s = '+ {- 9 4} {+ 3 2}'
p = filter(lambda x: x.strip() != '', re.split("([+{} -])", s)) 

会给你

['+', '{', '-', '9', '4', '}', '{', '+', '3', '2', '}']

IMO,您需要处理嵌套表达式

【讨论】:

  • entire 正则表达式本身必须用括号括起来,例如r'((\+|-)+)'。否则,您只能捕获一个子组。
猜你喜欢
  • 1970-01-01
  • 2019-01-21
  • 2020-04-09
  • 2019-02-16
  • 1970-01-01
  • 2017-05-29
  • 2016-11-14
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多