将标志作为参数传递给re.compile

13 投票
1 回答
10532 浏览
提问于 2025-04-18 05:23

我想根据下面类似的逻辑,把一些标志传递给re.compile函数。我在想这样做是否可行。

  flags = ""

  if multiline:
    flags = 're.M'

  if dotall:
    flags = flags + '|re.S'

  if verbose:
    flags = flags + '|re.X'

  if ignorecase:
    flags = flags + '|re.I'

  if uni_code:
    flags = flags + '|re.U'

  regex = re.compile(r'Test Pattern', flags)

1 个回答

28

re 的标志其实就是一些数字。所以,我们需要用二进制的“或”运算把它们结合起来,就像这样

flags = 0

if multiline:
  flags = re.M

if dotall:
  flags |= re.S

if verbose:
  flags |= re.X

if ignorecase:
  flags |= re.I

if uni_code:
  flags |= re.U

regex = re.compile(r'Test Pattern', flags)

撰写回答