Python 返回两个特殊字符之间的所有字符的正则表达式

Python 返回两个特殊字符之间的所有字符的正则表达式,python,regex,parsing,Python,Regex,Parsing,如何使用regx返回两个括号之间的所有字符。 以下是一个例子: foobar['infoNeededHere']ddd needs to return infoNeededHere 我找到了一个正则表达式,可以在花括号之间执行,但所有试图使用方括号的尝试都失败了。下面是正则表达式:(?将匹配一行并捕获您在组中想要的内容 您必须使用\ rubular.com链接上的文档将解释表达式是如何形成的。如果每行只有一个[…]标记,那么您根本不需要使用正则表达式: In [7]: mystring = "

如何使用regx返回两个括号之间的所有字符。 以下是一个例子:

foobar['infoNeededHere']ddd
needs to return infoNeededHere
我找到了一个正则表达式,可以在花括号之间执行,但所有试图使用方括号的尝试都失败了。下面是正则表达式:
(?将匹配一行并捕获您在组中想要的内容

您必须使用
\


rubular.com链接上的文档将解释表达式是如何形成的。

如果每行只有一个
[…]
标记,那么您根本不需要使用正则表达式:

In [7]: mystring = "Bacon, [eggs], and spam"

In [8]: mystring[ mystring.find("[")+1 : mystring.find("]") ]
Out[8]: 'eggs'
如果每行有不止一个这样的参数,那么您需要修改Jarrod的正则表达式
^.*\['(.*)\].*$
,以使每行匹配多次,并且不贪心。(使用
*?
量词而不是
*
量词。)


如果您是REG(古拉格)EX(pressions)的新手,您可以在上了解它们。或者,如果您想要更温和的介绍,您可以查看。它们使用Perl风格的语法

正则表达式 您需要的表达式是
*?\[(.*)\].
。您需要的组将是
\1

-
*?
匹配除换行符以外的任何字符。
*
是元字符,表示重复此操作0次或更多次。
使
*
不贪婪,即,
将在命中“[”之前匹配尽可能少的字符。
-
\[
\
转义特殊的元字符,在本例中,它是
[
。如果我们不这样做,
[
反而会做一些非常奇怪的事情。
-
(.*)
括号中的“组”可以在以后通过组的数字ID或名称(如果有)检索组。
-
\].
你现在应该知道这意味着什么

实施 首先,将
re
模块(它不是内置的)导入到您想要使用表达式的任何地方

然后,使用
re.search(regex\u pattern,string\u to\u be\u tested)
在要测试的字符串中搜索模式。这将返回一个
MatchObject
,您可以将其存储到一个临时变量中。然后应调用它的
group()
方法并将1作为参数传递(要查看我们前面使用括号捕获的“组1”),我现在应该如下所示:

>>> import re
>>> pat = r'.*?\[(.*)].*'             #See Note at the bottom of the answer
>>> s = "foobar['infoNeededHere']ddd"
>>> match = re.search(pat, s)
>>> match.group(1)
"'infoNeededHere'"
>>> import re
>>> pat = r'(?<=\[).+?(?=\])'  #See Note at the bottom of the answer
>>> s = "foobar['infoNeededHere']ddd[andHere] [andOverHereToo[]"
>>> re.findall(pat, s)
["'infoNeededHere'", 'andHere', 'andOverHereToo['] 
替代方案 您还可以使用
findall()
通过将正则表达式修改为
(?>=\[).+?(?=\])
来查找所有不重叠的匹配项
-
(?>导入re

>>>pat=r'(?我是否将其用于重新搜索?
a=re.search(“^.*\['(.*)\].*$”,“foobar['infoneedhere']ddd”)打印a.group()
正在返回
foobar['infoneedhere']ddd
关于学习正则表达式-我最喜欢的教程是的第8章。它非常容易阅读,并以逻辑顺序介绍正则表达式的概念和语法,有很多例子。我一直在办公桌上放着一份该章的副本。这对我很有用,非常好,谢谢你的解释。
In [15]: mystring = "[Bacon], [eggs], and [spam]."

In [16]: re.findall(r"\[(.*?)\]",mystring)
Out[16]: ['Bacon', 'eggs', 'spam']
>>> import re
>>> pat = r'.*?\[(.*)].*'             #See Note at the bottom of the answer
>>> s = "foobar['infoNeededHere']ddd"
>>> match = re.search(pat, s)
>>> match.group(1)
"'infoNeededHere'"
>>> import re
>>> pat = r'(?<=\[).+?(?=\])'  #See Note at the bottom of the answer
>>> s = "foobar['infoNeededHere']ddd[andHere] [andOverHereToo[]"
>>> re.findall(pat, s)
["'infoNeededHere'", 'andHere', 'andOverHereToo[']