这是我拥有的字符串(忽略空格)
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+)以及它们之间/之前/之后的任何文本。做这件事最好的方法是什么?我不确定正则表达式是否可以做到这一点,或者不丢失拆分参数的现有text.split修改是否可以做到(如果它存在)
发布于 2013-05-13 23:44:36
如果使用捕获括号将匹配参数re.split括起来,也可以返回匹配参数。
print re.split('(\(%[oi]\d+\))', a)更多信息here。
发布于 2013-05-14 00:05:02
描述
在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)摘要
(打开第一个\(组匹配bracket[%]需要一个开放四舍五入sign[a-z]需要任何小写字母character[0-9]{1,}在任何sequence\)中需要任意数量的数字需要关闭四舍五入bracket)关闭*first*group(打开第二个组match.*?匹配打开和之间的整个中心子字符串close substrings)关闭*second*组Match(打开third组匹配sign[a-z]需要一个开放的舍入bracket[%]要求有一个百分比sign[a-z]需要任何小写字母character[0-9]{1,}需要任意数量的数字在任何sequence\)中需要一个关闭四舍五入bracket)关闭group$ 确保有字符串结尾。这会强制第三组位于字符串的末尾,而不是悬停在中间的某个位置
免责声明
在您的源问题中,似乎第三组之前的\r\n子串被删除了,并且结果文本中包含了一些额外的空格,然后是源文本中的位置。我假设那些是偶然引入或删除的。
https://stackoverflow.com/questions/16525155
复制相似问题