使用python进行正则表达式

时间:2015-03-06 17:30:45

标签: python regex

我有一个棘手的正则表达式,我无法成功实现它。

我需要正则表达式:

AEBE52E7-03EE-455A-B3C4-E57283966239

我用它来做这样的识别:

url(r'^user/(?P<identification>\<regular expression>)$', 'view_add')

我尝试了一些像这样的表达式:

\[A-Za-z0-9]{8}^-{1}[A-Za-z0-9]{4}^-{1}[A-Za-z0-9]{4}^-{1}[A-Za-z0-9]{4}^-{1}[A-Za-z0-9]{12}
\........^-....^-....^-....^-............

有人可以帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:4)

只需删除正则表达式中的所有^符号。

>>> s = 'AEBE52E7-03EE-455A-B3C4-E57283966239'
>>> re.match(r'[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}$', s)
<_sre.SRE_Match object; span=(0, 36), match='AEBE52E7-03EE-455A-B3C4-E57283966239'>
>>> re.match(r'[A-Za-z0-9]{8}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{4}-[A-Za-z0-9]{12}$', s).group()
'AEBE52E7-03EE-455A-B3C4-E57283966239'

-{1}将被写为-似乎所有分隔的单词都是十六进制代码。因此,您可以使用[0-9a-fA-F]代替[A-Za-z0-9]

>>> re.match(r'[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$', s).group()
'AEBE52E7-03EE-455A-B3C4-E57283966239'

答案 1 :(得分:1)

您不需要^-不需要{1},您可以使用以下模式:

\w{8}-\w{4}-\w{4}-\w{4}-\w{12}

注意 \w将匹配任何字词(A-Za-z0-9

或者:

\w{8}-(\w{4}-){3}\w{12}

如评论中所述,如果您使用UUID作为一种更有效的方式,则可以使用以下模式:

[a-fA-F\d]{8}(-[a-fA-F\d]{4}){3}-[a-fA-F\d]{12}

DEMO