目标:我试图在Python RegEx中执行一个剪切,其中split不能完全实现我想要的效果。我需要在一个模式内,但在字符之间。在
我要找的是:
我需要在一个字符串中识别下面的模式,并在管道位置拆分字符串。这根管子实际上并不在绳子里,它只是显示我想在哪里分裂。在
图案:CDE|FG
字符串:ABCDEFGHIJKLMNOCDEFGZYPE
结果:['ABCDE', 'FGHIJKLMNOCDE', 'FGZYPE']
我的尝试:
我似乎使用带括号的split似乎很接近,但它并没有像我需要的那样将搜索模式附加到结果中。在
re.split('CDE()FG', 'ABCDEFGHIJKLMNOCDEFGZYPE')
给予
['AB', 'HIJKLMNO', 'ZYPE']
当我需要的时候
['ABCDE', 'FGHIJKLMNOCDE', 'FGZYPE']
动机:
我想看看我是否可以用正则表达式来编写一个脚本,用特定的蛋白酶来预测蛋白质消化的片段。在
你可以用
re.split()
和正的"look arounds"来解决它:请注意,如果其中一个剪切序列是空字符串,则会在结果列表中得到一个空字符串。你可以“手动”处理,样本(我承认,它不是那么漂亮):
^{pr2}$印刷品:
若要在使用
re.split
或其部分拆分时保持拆分模式,请将它们括在括号中。在很简单。所有的部件都在那里,但是正如你所看到的,它们已经分开了。所以我们需要重新组装。这才是最棘手的部分。仔细看,你会发现你需要把前两个部分连接起来,最后两个部分连接起来,剩下的三个部分连接起来。我通过填充列表来简化代码,但是如果性能有问题,可以使用原始列表(以及一些额外的代码)来完成。在
^{pr2}$re.split()
保证为每个捕获(带圆括号)组分配一个片段,再加上一个片段用于介于两者之间的组。对于需要自己分组的更复杂的正则表达式,请使用非捕获组来保持返回数据的格式不变。(否则需要调整重新组装步骤。)我也喜欢Bhargav Rao的建议,在字符串中插入一个分隔符字符。如果性能不是问题,我想这是一个品味的问题。在
编辑:这里有一种(透明度较低)方法,可以在不向列表中添加空字符串的情况下进行编辑:
一种非regex方法是使用管道值replace对模式执行split。在
相关问题 更多 >
编程相关推荐