【发布时间】:2014-11-23 23:40:55
【问题描述】:
逗号分隔的子字符串排列的正则表达式
嗨,
我想定义一个正则表达式来匹配由单个逗号分隔的两个子字符串组成的字符串。 每个子字符串不能为空,并且仅由字符“A”、“G”、“C”和“T”组成且不重复。 因此,模式应该匹配字符串,例如:
A,G
AG,CT
TC,CA
GAT,CGA
CGAT,TG
等等...
并且不应该匹配:
,G
ACGT
X,A
AA,G
AC,GGC
ATGA,TGG
ATCXG,AAC
等等...
到目前为止我有:
/^(?=[ACGT]{1,4},[ACGT]{1,4}$)(?!.*(.).*\1.*,)(?!,.*(.).*\1).*$/
/^(?=[ACGT]{1,4},[ACGT]{1,4}$)(?!.*(.).*\g{1}.*,)(?!,.*(.).*\g{1}).*$/
还尝试加入捕获组
/^(?=[ACGT]{1,4},[ACGT]{1,4}$)(?!.*(.).*\g{1}.*,.*(.).*\g{2}).*$/
现在,(?=[ACGT]{1,4},[ACGT]{1,4}$) 似乎与整个字符串中的“由单个逗号分隔的两个子字符串”和“仅由字符 'A'、'G'、'C' 和 'T' 组成”相匹配; (?!.*(.).*\1.*,) 似乎匹配“不重复”直到逗号。
但是,(?!,.*(.).*\1) 似乎无法确保它不匹配逗号后的重复字符。
非常感谢您提供有助于实现所需匹配的线索和/或模式的回复。
使用 perl v5.18.2
提前致谢
罗伯特
【问题讨论】:
-
这给了我一些有趣的尝试使用命名捕获组。谢谢,罗伯特!我希望我们的答案之一对您的设置很有效 :) StackOverflow 是获得 Regex 帮助和建议的好地方!请问这需要什么样的功能?我想知道这种模式识别可以用于什么上下文。