擅长:python、mysql、java
<p>要找到至少有6个重复字符的序列,可以使用捕获组和反向引用。你知道吗</p>
<pre><code>[atcg]*([atcg])\1{5}[atcg]*
</code></pre>
<p>将匹配:</p>
<ul>
<li><code>[atcg]*</code>匹配字符类中列出的任何字符0+次</li>
<li><code>([atcg])\1{5}</code>在组1中捕获与列出的任何一个匹配的内容,并重复对组1的反向引用5次</li>
<li><code>[atcg]*</code>匹配字符类中列出的任何字符0+次</li>
</ul>
<p><a href="https://regex101.com/r/LSfiMU/1" rel="nofollow noreferrer">Regex demo</a></p>
<p>您可以使用csv读取器并选择逗号作为分隔符(当您声明这是分隔符时,请注意示例数据中没有逗号)</p>
<p>如果是制表符,可以使用<code>'\t'</code>作为分隔符</p>
<p>如果<code>sequence</code>部分匹配,则使用相同的分隔符将行写入新文件。你知道吗</p>
<p>您的代码可能如下所示:</p>
<pre><code>import re
import csv
seqout = open('seqoutput.txt', 'a')
with open('sequences.txt','r') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
match = re.match(r'[atcg]*([atcg])\1{5}[atcg]*', row[1])
if match:
seqout.write(','.join(row) + "\n")
seqout.close()
</code></pre>