47

関数で複数のフラグを使用したいと思い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'

複数のフラグを使用する方法はありますか?

4

3 に答える 3

101

はい。ただし、それらを OR する必要があります。

x = re.findall(pattern=r'CAT.+?END', string='Cat \n eND', flags=re.I | re.DOTALL)
于 2015-06-04T18:21:07.047 に答える
15

タプル内にフラグを配置することはできません。フラグ内でパイプ文字 (OR オペランド) を使用します。

x = re.findall(r'CAT.+?END','Cat \n eND',flags=re.I | re.DOTALL)
于 2015-06-04T18:20:45.897 に答える