在python中,如何基于某种模式分离字符串而不丢失match参数?

2024-09-19 20:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我拥有的字符串(忽略空白)

a = u'(%o3) (9*t*(7*t*(5*t*(3*t^2-1)/2-2*t)/3-3*(3*t^2-1)2)/4-4\r\n*(5*t*(3*t^2-1)2 \r\n-2*t)\r\n/3)\r\n /5\r\n(%i4) '

我该怎么把它分解成这样:

b = ['(%o3','(9*t*(7*t*(5*t*(3*t^2-1)/2-2*t)/3-3*(3*t^2-1)2)/4-4\r\n*(5*t*(3*t^2-1)2\r\n-2*t)\r\n/3)\r\n /5','(%i4)' ]

这有点像检查模式(%o\d+)和(%i\d+)并在它们出现的地方进行拆分,但不丢失模式本身,a.split(blah)通常 松散的'废话'。在我的语境中,“废话”是有意义的,我不能放松它。你知道吗

可能有两个以上的模式出现,所以我需要分开的模式 (%o\d+)和(%i\d+)以及它们之间/之后的任何文本。 最好的办法是什么? 我不确定regexes是否可以做到这一点,或者是现有的修改文本.拆分如果split参数存在的话


Tags: 字符串文本地方模式空白意义splitblah
2条回答

说明

在python中,您可以使用

this link to regex(\([%][a-z][0-9]{1,}\))(.*?)(\([%][a-z][0-9]{1,}\))$

当你用绳子

(%o3)  (9*t*(7*t*(5*t*(3*t^2-1)/2-2*t)/3-3*(3*t^2-1)2)/4-4\r\n*(5*t*(3*t^2-1)2\r\n-2*t)\r\n/3)\r\n /5\r\n(%i4)

产生以下分组匹配

group(0) - the entire string
group(1) - (%o3)
group(2) - (9*t*(7*t*(5*t*(3*t^2-1)/2-2*t)/3-3*(3*t^2-1)2)/4-4\r\n*(5*t*(3*t^2-1)2\r\n-2*t)\r\n/3)\r\n /5\r\n
group(3) - (%i4)

摘要

  • (打开第一个组匹配
  • \(需要一个开放的圆括号
  • [%]要求有百分号
  • [a-z]需要任何小写字母字符
  • [0-9]{1,}需要任意序列中任意数量的数字
  • \)需要一个圆括号
  • )关闭*first*组
  • (打开第二组比赛
  • .*?在打开和关闭子字符串之间匹配整个中间子字符串
  • )关闭*第二个*组匹配
  • (打开第三组比赛
  • \(需要一个开放的圆括号
  • [%]要求有百分号
  • [a-z]需要任何小写字母字符
  • [0-9]{1,}需要任意序列中任意数量的数字
  • \)需要一个圆括号
  • )关闭第三组
  • $确保字符串有结尾。这迫使第三组在字符串的末尾,而不是在中间的某个地方徘徊

免责声明

在源代码问题中,第三组where之前的\r\n子字符串被删除,结果文本中包含了一些额外的空格,而源代码中则包含where。我假设那些是偶然引入或掉落的。你知道吗

如果在match参数周围使用括号重新拆分同时返回match参数。你知道吗

print re.split('(\(%[oi]\d+\))', a)

更多信息here。你知道吗

相关问题 更多 >