首页 文章

正则表达式在方括号之间提取文本

提问于
浏览
283

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

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

提取方括号内的单词的正则表达式是什么,即 .

sample
some
another one

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

7 回答

  • 58

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

    (?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))
    
    (?: 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
    
  • 3

    您可以使用以下正则表达式 globally

    \[(.*?)\]
    

    说明:

    • \[[ 是一个元字符,如果你想按字面意思匹配它,需要进行转义 .

    • (.*?) :以非贪婪的方式匹配所有内容并捕获它 .

    • \]] 是一个元字符,如果你想按字面意思匹配它,需要进行转义 .

  • 77

    这应该没问题:

    \[([^]]+)\]
    
  • 30
    (?<=\[).+?(?=\])
    

    将无需括号捕获内容

    • (?<=\[) - [ 的正面观察

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

    • (?=\]) - ] 的正向前瞻

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

    (\[(?:\[??[^\[]*?\]))
    
  • 8

    括号可以嵌套吗?

    如果不是: \[([^]]+)\] 匹配一个项目,包括方括号 . 反向引用 \1 将包含要匹配的项目 . 如果您的正则表达式支持环视,请使用

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

    这只会匹配括号内的项目 .

  • 561

    (?<=\().*?(?=\)) 按照上面给出的解释工作得很好 . 这是一个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'"
    
  • 3
    ([[][a-z \s]+[]])
    

    鉴于以下解释,上述应该起作用

    方括号[]中的

    • 个字符定义了characte类,这意味着模式应匹配方括号中提到的至少一个charcater

    • \ s指定一个空格

    • 表示至少之前提及的一个字符 .

相关问题