Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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 如何检查两个部分中从字符集中选择的正则表达式是否相等?_Python_Regex - Fatal编程技术网

Python 如何检查两个部分中从字符集中选择的正则表达式是否相等?

Python 如何检查两个部分中从字符集中选择的正则表达式是否相等?,python,regex,Python,Regex,测试字符串:gcaattataccatacttttttaaattcacaattcacatactag 我想检测的内容:两个字符的任意组合,包括其中的“a”,并且“a”不能是第一个字符 示例:gcaaaattatacccacatttcttttttt aaaatttcagcaattaaactatacg 我的正则表达式:[{g,t,c}]{2,}a[{a,g,t,c}] 问题:当它匹配第一个集合{g,t,c}中的字符时,它将匹配第二个列表中的任何字符 我的问题:如何从第二个列表中匹配已从第一个集合中选择

测试字符串:
gcaattataccatacttttttaaattcacaattcacatactag

我想检测的内容:两个字符的任意组合,包括其中的“a”,并且“a”不能是第一个字符

示例:gcaaaa
ttata
cccacatttc
ttttttt aaaattt
cagcaattaaac
tata
cg

我的正则表达式:
[{g,t,c}]{2,}a[{a,g,t,c}]

问题:当它匹配第一个集合{g,t,c}中的字符时,它将匹配第二个列表中的任何字符

我的问题:如何从第二个列表中匹配已从第一个集合中选择的输出,如上面的示例所示


更新

进一步解释: -该组合只有两个字符,包括“a” -“a”必须介于两者之间,不能作为开始。因此,“ttttaaa”以t开头,但不截取“a”,如果它是同一个字符“t”,则匹配模式,如果任何字符不是“a”或“t”,则停止匹配

  • 所以这些都起作用了:“tttaaat”,“TATTTATATAT”
  • 这些不起作用:“taaaaaaa”、“attttta”

如果有帮助的话,我正在用python编写。

您可以尝试以下内容:

import re

s = 'gcaaaattatacccacatttctttttaaaatttcagcaaaattttaaactatacg'
for match in re.finditer(r'(g|c|t)\1*a+(\1)(\1|a)*', s):
    print(match.group())
输出:

ttata
cccaca
tttttaaaattt
tata

举个例子
(g | c | t)
匹配任何字符
gct
,并捕获它
\1*a+\1
将第一个字符重复0次或多次,之后至少有一个
a
后跟第一个字符<代码>(\1 | a)*结尾处允许
a
和第一个字符的任意组合。

您可以尝试以下操作:

import re

s = 'gcaaaattatacccacatttctttttaaaatttcagcaaaattttaaactatacg'
for match in re.finditer(r'(g|c|t)\1*a+(\1)(\1|a)*', s):
    print(match.group())
输出:

ttata
cccaca
tttttaaaattt
tata
举个例子
(g | c | t)
匹配任何字符
gct
,并捕获它
\1*a+\1
将第一个字符重复0次或多次,之后至少有一个
a
后跟第一个字符<代码>(\1 | a)*结尾处允许
a
和第一个字符的任意组合。

您可以使用
([gtc])\1*(a+)(\1+\2*)+
查找至少一个g、t或c,后跟一个或多个a,然后查找这两个字符的任意组合

import re

word='gcaaaattatacccacatttctttttaaaatttcagcaaaattttaaactatacg'

matches = re.finditer(r'([gtc])\1*(a+)(\1+\2*)+', word)
for matchNum, match in enumerate(matches):
  print(match.group())
您可以使用
([gtc])\1*(a+)(\1++\2*)+
查找至少一个g、t或c,后跟一个或多个a,然后查找这两个字符的任意组合

import re

word='gcaaaattatacccacatttctttttaaaatttcagcaaaattttaaactatacg'

matches = re.finditer(r'([gtc])\1*(a+)(\1+\2*)+', word)
for matchNum, match in enumerate(matches):
  print(match.group())

实现目标的一种方法是捕获第一个字符,并在表达式的第三部分反向引用它

像这样:

(?P<first>[gtc])(?P=first)?a(?:a|(?P=first))*
(?P[gtc])(?P=first)?a(?:a |(?P=first))*

实现目标的一种方法是捕获第一个字符,并在表达式的第三部分反向引用它

像这样:

(?P<first>[gtc])(?P=first)?a(?:a|(?P=first))*
(?P[gtc])(?P=first)?a(?:a |(?P=first))*

塔塔如何与您的模式匹配?1-“a”不是第一个字符2-所有的组合只有两个字符,包括“a”,那么在此之前的
ttttaaa
呢?或
caaaa
在此之前,“a”必须介于两者之间,不能作为开始。因此,“ttttaaa”以t开头,但不截取“a”s,如果它是相同的字符“t”,那么匹配模式,如果任何字符不是“a”或“t”停止匹配。我发布了一个更新,请检查它如何匹配您的模式?1-“a”不是第一个字符2-所有的组合都是两个字符,包括“a”那之前呢?或
caaaa
在此之前,“a”必须介于两者之间,不能作为开始。因此,“ttttaaa”以t开头,但不截取“a”s,如果它是相同的字符“t”,那么匹配模式,如果任何字符不是“a”或“t”停止匹配。我发布了一个更新,请检查它