代码之家  ›  专栏  ›  技术社区  ›  ObiWanKenobi

用于提取方括号之间文本的正则表达式

  •  305
  • ObiWanKenobi  · 技术社区  · 16 年前

    简单的正则表达式问题。我有一个字符串,格式如下:

    this is a [sample] string with [some] special words. [another one]
    

    在方括号内提取单词的正则表达式是什么?

    sample
    some
    another one
    

    注意:在我的用例中,括号不能嵌套。

    7 回复  |  直到 7 年前
        1
  •  590
  •   codaddict    16 年前

    您可以使用以下regex 全球地 :

    \[(.*?)\]
    

    说明:

    • \[ : [ 是一个元字符,如果要逐字匹配,则需要对其进行转义。
    • (.*?) :以非贪婪的方式匹配所有内容并捕获它。
    • \] : ] 是一个元字符,如果要逐字匹配,则需要对其进行转义。
        2
  •  79
  •   jasonbar    16 年前

    这应该没问题:

    \[([^]]+)\]
    
        3
  •  70
  •   wnull Adam Moszczyński    7 年前
    (?<=\[).+?(?=\])
    

    将捕获不带括号的内容

    • (?<=\[) -积极寻找 [

    • .*? -内容的非贪婪匹配

    • (?=\]) -积极展望 ]

    编辑:对于嵌套括号,下面的正则表达式应该可以工作:

    (\[(?:\[??[^\[]*?\]))
    
        4
  •  32
  •   Tim Pietzcker    16 年前

    括号可以嵌套吗?

    如果不是: \[([^]]+)\] 匹配一个项,包括方括号。回溯 \1 将包含要匹配的项。如果您的regex风格支持lookaround,请使用

    (?<=\[)[^]]+(?=\])
    

    这将只匹配括号内的项。

        5
  •  8
  •   Alan Moore Chris Ballance    11 年前

    (?<=\().*?(?=\)) 根据上面的解释,工作正常。下面是一个python示例:

    import re 
    str =    "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')"
    re.search('(?<=\().*?(?=\))', str).group()
    "'formPagination_bottom',2,'Page',true,'1',null,'2013'"
    
        6
  •  3
  •   Peon    13 年前
    ([[][a-z \s]+[]])
    

    上面的解释如下

    • 方括号内的字符[]定义characte类,这意味着模式应至少与方括号内提到的一个charcate匹配

    • \ s指定一个空格

    • +表示前面提到的至少一个字符。

        7
  •  3
  •   Nezar Fadle    11 年前

    此代码将提取方括号和圆括号之间的内容

    (?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))
    
    (?: non capturing group
    (?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses
    | or
    (?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets