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

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

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

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

sample
some
another one

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

回答(7)

2 years ago

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

\[(.*?)\]

说明:

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

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

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

2 years ago

这应该没问题:

\[([^]]+)\]

2 years ago

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

将无需括号捕获内容

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

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

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

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

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

2 years ago

括号可以嵌套吗?

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

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

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

2 years ago

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

2 years ago

([[][a-z \s]+[]])

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

方括号[]中的

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

  • \ s指定一个空格

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

2 years ago

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

(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\]))

(?: 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