Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python cs50 PSET6/DNA正则表达式_Python_Regex_Cs50 - Fatal编程技术网

Python cs50 PSET6/DNA正则表达式

Python cs50 PSET6/DNA正则表达式,python,regex,cs50,Python,Regex,Cs50,我试图通过在序列文件中查找连续STR(一个子字符串模式,即“AGAT”)的数量来工作 字符串模式:AGATC、TTTTCT、AATG、TCTAG、GATA、TATC、GAAA、TCTG 序列文件(许多其他序列文件中的一个):aaggtaagtttagaatataaggtgtagtaaatagaaaggttaaaattaaggagatcagatcagatcagatcagatctatctatctatctatctatcatcagagagagagataatagtagagagagataatagtagaga

我试图通过在序列文件中查找连续STR(一个子字符串模式,即“AGAT”)的数量来工作

字符串模式:AGATC、TTTTCT、AATG、TCTAG、GATA、TATC、GAAA、TCTG

序列文件(许多其他序列文件中的一个):aaggtaagtttagaatataaggtgtagtaaatagaaaggttaaaattaaggagatcagatcagatcagatcagatctatctatctatctatctatcatcagagagagagataatagtagagagagataatagtagagatagatgagataatgatggaatattgttggaaagaggatagagagagagagg

在上述顺序中,TATC是连续运行5对TATC的最大值。对于我的正则表达式,它将返回匹配项,无论它们是否连续

我相信使用正则表达式是我最好的选择。这是我第一次使用Python,所以不要期望太多。我在regex101.com上使用了regex工具,它让我对regex公式有了一些很好的了解。我将一个变量传递到带有{head}的正则表达式中,这是字符串模式,但我希望找到匹配的字符串
{head}
2次或更多次。我的bellow regex至少会返回1次或更多次与
head
匹配的结果,因此我知道为什么会这样返回

groups = re.findall(rf'?:{head})+, text)
如果我在regex101.com中使用
r“(AGAT){2,}”
,这就是我期望的工作方式。它查找匹配的字符串2次或多次。如果我将它作为
groups=re.findall(rf'(?:{head}){2,})
传递到代码中,它不会返回任何内容

我的代码如下:

import csv
import re
import string


if len(sys.argv) != 3:
    print("missing command-line argument")
    exit(1)

if re.search(r"(.csv)", sys.argv[1]) == None:
    print("CSV file not found!")
    print("Usage: 'python.py *.csv *.txt'")
    exit(1)

if re.search(r"(.txt)", sys.argv[2]) == None:
    print("TXT file not found!")
    print("Usage: 'python.py *.csv *.txt'")
    exit(1)

# use reader or DictReader from the CSV module
# use sys.argv for command-line arguments
# use open(filename) and f.read() to read its contents.

# open CSV and DNA sequence and read into memory
with open(sys.argv[1], newline='') as database, open(sys.argv[2], newline='') as sequence:
    reader = csv.DictReader(database)
    headers = reader.fieldnames
    text = sequence.read()
    for head in headers:
        groups = re.findall(rf'(?:{head})+', text)
        print(head, groups)
如果我使用上面的
groups=re.findall(rf'(?:{head})+',text)
变量,我会得到下面的输出

AGATC ['AGATCAGATCAGATCAGATC']
TTTTTTCT []
AATG ['AATG']
TCTAG []
GATA ['GATA', 'GATA']
TATC ['TATCTATCTATCTATCTATC']
GAAA ['GAAA', 'GAAA', 'GAAA']
TCTG []
如果我使用
groups=re.findall(rf'(?:{head}){2,}',text)

AGATC []
TTTTTTCT []
AATG []
TCTAG []
GATA []
TATC []
GAAA []
TCTG []
因此,我想我是在问,如何使用regex查找字符串(作为变量传递)2次或更多次?

您可以在正则表达式中使用pattern
((您的模式)\2*)
查找最大的连续模式(对于pattern
TATC
):

印刷品:

Most repeated pattern: TATC, number of repetitions 5

这个答案来自Reddit的cs50子Reddit上的一个用户yeahIProgram

"That's what I was referring to, but I had to look it up and you escape the braces inside the formatted string by doubling them."
因此,我要寻找的正则表达式是
groups=re.findall(rf'(({head}){{2,}}),text)
。它返回了我期望的以下输出

AGATC [('AGATCAGATCAGATCAGATC', 'AGATC')]
TTTTTTCT []
AATG []
TCTAG []
GATA []
TATC [('TATCTATCTATCTATCTATC', 'TATC')]
GAAA []
TCTG []
现在,我只需要得到字符串出现的总次数,我应该能很好地理解它


感谢@Andrej Kesely的支持。

我尝试了
groups=re.findall(rf'(?:{head})\2*”
我发现自己有很多错误。我可以将字符串模式放在一个数组中,但我们面临的挑战是将这些模式作为CSV文件的头,我们需要将其取出。这就是为什么我需要将其保留为变量。我尝试了两种建议
groups=re.findall(rf'(?:{head})\1*,text)
groups=re.findall(rf'(?:{head})\2*,text)
都返回了错误。如下:回溯(最近一次调用):STRs=re.compile(rf'(?:{head})\2*)文件“/usr/local/lib/python3.7/sre_parse.py”,第399行,在_escape-raise-source.error中(“无效的组引用%d”%group,len(escape)-1)re.error:无效的组引用2位于位置9不幸的是,我仍在抛出错误。
回溯(最后一次调用):文件“dna.py”,第31行,在groups=re.findall(rf'((?{head})\2*),text)re.error:未知扩展名?n位于位置2
@Rsp8请不要使用
groups=re.findall(rf'({head})\2*),text)
->正如我在回答中所说的那样。@Anrej Kesley,这似乎是可行的,但它不是只返回一个字符串,而是返回多个。
AGATC[('agatcagatcagatc','AGATC')]tttttttttt-ct[]AATG[('AATG','AATG')]TCTAG[[GATA[('GATA','GATA','GATA'),('GATA','GATA')]TATC[('TATCTATCTATCTATC','TATC')]GAAA[('GAAA','GAAA','GAAA'),('GAAA','GAAA'),('GAAA','GAAA')]TCTG[]
我只需要最长的连续时间。我会继续玩它。
AGATC [('AGATCAGATCAGATCAGATC', 'AGATC')]
TTTTTTCT []
AATG []
TCTAG []
GATA []
TATC [('TATCTATCTATCTATCTATC', 'TATC')]
GAAA []
TCTG []