我特别关注R,Perl和shell.但是任何其他编程语言都可以.
题
有没有办法以视觉或编程方式检查和索引基于正则表达式的匹配字符串?这是为了在第二个正则表达式中引用回到第一个正则表达式及其结果,以便能够修改匹配字符串的一部分并为该特定部分编写新规则.
https://regex101.com确实可视化某个字符串与正则表达式的匹配方式.但它远非完美,对我庞大的数据集效率不高.
问题
我的第一个正则表达式有大约12000个匹配的字符串(DNA序列),我想处理这些字符串并根据一些严格的规则在第二个文件中找到一些其他字符串,这些字符串与基于这些严格规则的12000个匹配项一起很好.
简化的例子
这是我的第一个正则表达式(我的原始正则表达式的简化版本)贯穿我的第一个文本文件.
Run Code Online (Sandbox Code Playgroud)[ACGT]{1,12000}(AAC)[AG]{2,5}[ACGT]{2,5}(CTGTGTA)
我们假设它在我的大文本文件中找到以下三个子字符串:
1. AAACCCGTGTAATAACAGACGTACTGTGTA
2. TTTTTTTGCGACCGAGAAACGGTTCTGTGTA
3. TAACAAGGACCCTGTGTA
Run Code Online (Sandbox Code Playgroud)
现在我有第二个文件,其中包含一个非常大的字符串.从第二个文件中,我只想提取那些匹配新(第二)正则表达式的子字符串,这些正则表达式本身依赖于我的第一个正则表达式.因此,第二个正则表达式必须考虑第一个文件中匹配的子字符串,并查看它们与第一个正则表达式的匹配方式!
为了简单起见,请允许我以这种方式索引我的第一个正则表达式以便更好地说明:
first.regex.p1 = [ACGT]{1,12000}
first.regex.p2 = (AAC)
first.regex.p3 = [AG]{2,5}
first.regex.p4 = [ACGT]{2,5}
first.regex.p5 = (CTGTGTA)
Run Code Online (Sandbox Code Playgroud)
现在我的第二个(新的)正则表达式将搜索第二个文本文件并将依赖于第一个正则表达式的结果(以及从第一个文件返回的子字符串如何匹配第一个正则表达式)将按以下方式定义:
Run Code Online (Sandbox Code Playgroud)second.regex = (CTAAA)[AC]{5,100}(TTTGGG){**rule1**} (CTT)[AG]{10,5000}{**rule2**}
在这里,rule1和rule2依赖于来自第一个文件的第一个正则表达式的匹配.因此,
rule1 = look at the matched strings from file1 and complement the pattern of first.regex.p3 that is found in …Run Code Online (Sandbox Code Playgroud) int a, b, c = 0;
c = (a+b)/2;
Run Code Online (Sandbox Code Playgroud)
在这段代码中,如果"a"和"b"都是偶数(例1),则没有问题.但如果其中一个是奇数(例2),则答案将为+0.5.我想把它整理一下.
例1.
a = 4,b = 10
c将= 7这没关系.
例2.
a = 3,b = 4
c将= = 3.5 我希望c被四舍五入而成为4.