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”不能是第一个字符
示例:gcaaaattata
cccacatttcttttttt aaaattt
cagcaattaaactata
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”停止匹配。我发布了一个更新,请检查它