我有几百个(相当简单的)正则表达式以及它们在大量序列中的匹配项。我想知道每个正则表达式的哪个部分匹配目标序列中的哪个位置。例如,以下正则表达式“[DSTE][^P][^DEWHFYC]D[GSAN]”可以按以下顺序与位置4到8匹配:
ABCSGADAZZZ
我想(通过编程)得到的是,对于每个正则表达式,1)正则表达式的每个“部分”,2)目标序列中与其匹配的位置:
[DSTE] -- (3, 4),
[^P] -- (4, 5),
[^DEWHFYC] -- (5, 6),
D -- (6, 7),
[GSAN] -- (7, 8)
我发现这个网站基本上实现了我想要的:https://regex101.com/,但我不确定我需要深入到正则表达式解析的多深才能在我自己的代码中实现这一点(我使用的是Python和R)
使用stringr包,您应该能够这样组合:
然后组合函数输出或编写一个简单的包装函数
如果要提取正则表达式每个部分匹配的字符串的位置,则应使用
()
将其覆盖,使每个片段成为一个捕获组。如果不这样做,您将无法分析正则表达式每个部分匹配的位置现在,您可以看到每个部分都是分开的。因此,可以使用另一个正则表达式来提取正则表达式的每个部分
奖励:您还可以提取正则表达式每个部分匹配的文本的部分
因此,使用^{} 方法获得所需的数据,如下所示
Live Example
它仍然不是100%,但我在数据集的3365/3510上返回了输出。我检查过的几个人排成一行:)
我的github(链接如下)中包含csv、txt(分别)格式的输入和输出
请忽略全局变量;我正在考虑转换代码,看看速度是否有明显的提高,但没有回避
当前,此版本在有关交替和开始/结束行运算符(^$)的操作顺序方面存在问题,如果它们是字符串开头或结尾的交替选项。我很有信心这与先例有关;但我没能把它组织得足够好
代码的函数调用位于最后一个单元格中。而不是使用
通过向函数传递模式和相应的序列,您可以轻松地一次测试一个,如下所示:
代码: https://github.com/jameshollisandrew/just_for_fun/blob/master/motif_matching/motif_matching_02.ipynb
投入: https://github.com/jameshollisandrew/just_for_fun/blob/master/motif_matching/elm_compiled_ss_re.csv
产出: https://github.com/jameshollisandrew/just_for_fun/blob/master/motif_matching/motif_matching_02_outputs.txt
输出返回示例
输出值(即子表达式和索引集)由制表符分隔
数据来源: ELM(蛋白质功能位点的真核线性基序资源)2020。从http://elm.eu.org/searchdb.html检索
相关问题 更多 >
编程相关推荐