我试图在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()
返回整个匹配而不是捕获的组,因为您需要为所需的组添加数字.
归档时间: |
|
查看次数: |
17855 次 |
最近记录: |