Python正则表达式只捕获某些文本

Spe*_*cer 10 python regex

我试图在python中找到类似于Ruby函数扫描的功能.我的目标是获取列表中两个花括号之间的所有文本.如果字符串中有多对花括号,我希望列表中有多个条目.

当我运行此代码时:

 match = re.search(r'\{(.+)\}', request.params['upsell'])
 print match.group()
Run Code Online (Sandbox Code Playgroud)

我匹配正确的文字.但是,捕获的内容包括花括号.我不想包含这个文本,我想包括介于两者之间的所有内容,但不包括花括号谢谢!

Jac*_*ers 12

使用group(1),或lookbehinds/aheads.(另外,一定要接受FJ和JF的建议,并使用.+?或者[^{}]*

import re
match = re.search(r'\{(.+)\}', "asdfasd {asdf}asdfasdf")
print match.group(1)
Run Code Online (Sandbox Code Playgroud)

或者与lookbehinds/aheads:

import re
match = re.search(r'(?<=\{)(.+)(?=\})', "asdfasd {asdf}asdfasdf")
print match.group()
Run Code Online (Sandbox Code Playgroud)


And*_*ark 10

re.findall(r'\{(.+?)\}', request.params['upsell'])
Run Code Online (Sandbox Code Playgroud)

这将返回一个列表,其中每个条目是不同花括号组的内容.请注意,这不适用于嵌套大括号.

?.+将使一个懒惰匹配(而不是贪婪).这意味着匹配将停在第一个"}",而不是继续匹配尽可能多的字符并在最后一个右括号结束.

re.findall()将搜索您的字符串并查找所有不重叠的匹配项,并返回该组.或者你可以使用re.finditer()哪个迭代Match对象,但是你需要使用它match.group(1)来获取大括号里面的内容.这也是您在示例中需要更改的内容,match.group()返回整个匹配而不是捕获的组,因为您需要为所需的组添加数字.