字符串只能包含A,U,G或C.

时间:2014-05-13 19:29:52

标签: python regex

原谅这个简单化的问题,但我已经阅读了SO问题和Python文档,仍然无法解决这个问题。

如何创建Python正则表达式来测试字符串是否包含ANY,但只包含A,U,G和C字符?字符串可以包含其中一个或所有字符,但如果它包含任何其他字符,我希望正则表达式失败。

我试过了:

>>> re.match(r"[AUGC]", "AUGGAC")
<_sre.SRE_Match object at 0x104ca1850>

但是在字符串末尾添加一个X仍然有效,这不是我的预期:

>>> re.match(r"[AUGC]", "AUGGACX")
<_sre.SRE_Match object at 0x104ca1850>

提前致谢。

8 个答案:

答案 0 :(得分:5)

您需要使用正则表达式来使用整个字符串(如果不能,则会失败)。 re.match隐含地在字符串的开头添加一个锚点,你需要在结尾添加一个:

re.match(r"[AUGC]+$", string_to_check)

另请注意+,它会重复匹配您的字符集(因为,重点是消耗整个字符串)

答案 1 :(得分:2)

使用^[AUCG]*$;这将匹配整个字符串。

或者,如果必须至少有一个字母,^[AUCG]+$ - ^$代表字符串的开头结束字符串; *+分别代表零或更多一个或多个

这纯粹是关于正则表达式而不是特定于Python的。

答案 2 :(得分:2)

如果值是字符串中的唯一字符,则可以执行以下操作:

>>> r = re.compile(r'^[AUGC]+$')
>>> r.match("AUGGAC")
<_sre.SRE_Match object at 0x10ee166b0>
>>> r.match("AUGGACX")
>>> 

然后如果你想让正则表达式匹配空字符串,你可以这样做:

>>> r = re.compile(r'^[AUGC]*$')
>>> r.match("")
<_sre.SRE_Match object at 0x10ee16718>
>>> r.match("AUGGAC")
<_sre.SRE_Match object at 0x10ee166b0>
>>> r.match("AUGGACX")

这里描述了第一个正则表达式的作用:

Regular expression visualization

Walk through it

答案 3 :(得分:1)

你真的很亲密。您刚刚测试的是A或U或G或C的单个字符。

你想要的是匹配一个或多个字母都是A或U或G或C的字符串,你可以通过在正则表达式中添加加号修饰符来实现这一点。

re.match(r"^[AUGC]+$", "AUGGAC")

此外,在末尾添加$标记字符串的结尾,您可以选择使用前面的^来匹配字符串的开头。

答案 4 :(得分:1)

只是检查一下除了&#34; AUGC&#34;在那里:

if re.search('[^AUGC]', string_to_check):
    #fail

您可以添加检查以确保字符串在同一语句中不为空:

if not string_to_check or re.search('[^AUGC]', string_to_check):
    #fail

答案 5 :(得分:1)

不需要使用正则表达式:

>>> good = 'AUGGCUA'
>>> bad = 'AUGHACUA'
>>> all([c in 'AUGC' for c in good])
True
>>> all([c in 'AUGC' for c in bad])
False

答案 6 :(得分:1)

我知道你正在询问正则表达式,但我还是值得一提set。要确定您的字符串是否仅包含A U G或C,您可以这样做:

>>> input = "AUCGCUAGCGAU"
>>> s = set("AUGC")
>>> set(input) <= s
True
>>> bad = "ASNMSA"
>>> set(bad) <= s
False

修改:感谢@roippi发现我的错误,应该使用<=,而不是==

不使用<=,而是可以使用方法issubset

>>> set("AUGAUG").issubset(s)
True

如果字符串input中的所有字符都在集s中,则issubset将返回True

答案 7 :(得分:0)

来自:https://docs.python.org/2/library/re.html

可以通过补充集来匹配不在范围内的字符。 如果集合的第一个字符是“^”,则将匹配集合中不包含的所有字符。 例如,[^ 5]将匹配除“5”之外的任何字符,[^^]将匹配除“^”之外的任何字符。 如果它不是集合中的第一个字符,则没有特殊含义。

所以你可以做[^ AUGC]并且如果它匹配那么拒绝它,否则保留它。