正则表达式捕获基于可选子字符串的可选组

时间:2012-08-13 19:49:09

标签: python regex regex-group

我想创建一个正则表达式来捕获基于可选子字符串的可选组。例子可能是:

DATEF[[%d/%m/%Y %H:%M 
DATEF[[%H:%M]]
DATEF
TIME

我希望捕获DATE和参数%H:%M。 表达式(.*?)\[\[(.*?)\]\]适用于参数,但可选的排除字符串失败并返回null。

1 个答案:

答案 0 :(得分:1)

我会建议这个:

/^([a-zA-Z]+)(?:\[\[([^\]]+)\]\])?$/

第1组包含功能名称,如果存在[[,则第2组会捕获[[]]之间的所有内容,如果广场不存在,则第2组将不会完全存在。

修改

注意外部非捕获组包含捕获组:

/^([a-zA-Z]+)         #captures the command
    (?:\[\[           #matches, but not captures the opening brackets
        ([^\]]+?)     #captures the content of the brackets
    \]\])?            #matches the closing brackets
$/x