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