在 python re.findall 中使用多个标志
Using more than one flag in python re.findall
我想在 re.findall
函数中使用多个标志。更具体地说,我想同时使用 IGNORECASE
和 DOTALL
标志。
x = re.findall(r'CAT.+?END', 'Cat \n eND', (re.I, re.DOTALL))
错误:
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
x = re.findall(r'CAT.+?END','Cat \n eND',(re.I,re.DOTALL))
File "C:\Python27\lib\re.py", line 177, in findall
return _compile(pattern, flags).findall(string)
File "C:\Python27\lib\re.py", line 243, in _compile
p = sre_compile.compile(pattern, flags)
File "C:\Python27\lib\sre_compile.py", line 500, in compile
p = sre_parse.parse(p, flags)
File "C:\Python27\lib\sre_parse.py", line 673, in parse
p = _parse_sub(source, pattern, 0)
File "C:\Python27\lib\sre_parse.py", line 308, in _parse_sub
itemsappend(_parse(source, state))
File "C:\Python27\lib\sre_parse.py", line 401, in _parse
if state.flags & SRE_FLAG_VERBOSE:
TypeError: unsupported operand type(s) for &: 'tuple' and 'int'
有没有办法使用多个标志?
不能将标志放在元组中。在您的标志中使用竖线字符(或操作数):
x = re.findall(r'CAT.+?END','Cat \n eND',flags=re.I | re.DOTALL)
是的,但你必须将它们放在一起:
x = re.findall(pattern=r'CAT.+?END', string='Cat \n eND', flags=re.I | re.DOTALL)
Is there a way to use more than one flag ?
没有提到,但您也可以使用 inline (?...)
modifiers。
x = re.findall(r'(?si)CAT.+?END', 'Cat \n eND')
我想在 re.findall
函数中使用多个标志。更具体地说,我想同时使用 IGNORECASE
和 DOTALL
标志。
x = re.findall(r'CAT.+?END', 'Cat \n eND', (re.I, re.DOTALL))
错误:
Traceback (most recent call last):
File "<pyshell#78>", line 1, in <module>
x = re.findall(r'CAT.+?END','Cat \n eND',(re.I,re.DOTALL))
File "C:\Python27\lib\re.py", line 177, in findall
return _compile(pattern, flags).findall(string)
File "C:\Python27\lib\re.py", line 243, in _compile
p = sre_compile.compile(pattern, flags)
File "C:\Python27\lib\sre_compile.py", line 500, in compile
p = sre_parse.parse(p, flags)
File "C:\Python27\lib\sre_parse.py", line 673, in parse
p = _parse_sub(source, pattern, 0)
File "C:\Python27\lib\sre_parse.py", line 308, in _parse_sub
itemsappend(_parse(source, state))
File "C:\Python27\lib\sre_parse.py", line 401, in _parse
if state.flags & SRE_FLAG_VERBOSE:
TypeError: unsupported operand type(s) for &: 'tuple' and 'int'
有没有办法使用多个标志?
不能将标志放在元组中。在您的标志中使用竖线字符(或操作数):
x = re.findall(r'CAT.+?END','Cat \n eND',flags=re.I | re.DOTALL)
是的,但你必须将它们放在一起:
x = re.findall(pattern=r'CAT.+?END', string='Cat \n eND', flags=re.I | re.DOTALL)
Is there a way to use more than one flag ?
没有提到,但您也可以使用 inline (?...)
modifiers。
x = re.findall(r'(?si)CAT.+?END', 'Cat \n eND')