Skip to main content
 首页 » 编程设计

python之在正则表达式中拆分行

2025年05月04日25落叶

我试图将一个长的正则表达式分解成更小的 block 。将 A 更改为 B 是否可能/良好做法?

答:

line = re.sub(r'\$\{([0-9]+)\}|\$([0-9]+)|\$\{(\w+?\=\w?+)\}|[^\\]\$(\w[^-]+)|[^\\]\$\{(\w[^-]+)\}',replace,line) 

乙:

line = re.sub(r'\$\{([0-9]+)\}|' 
              r'\$([0-9]+)|' 
              r'\$\{(\w+?\=\w?+)\}|' 
              r'[^\\]\$(\w[^-]+)|' 
              r'[^\\]\$\{(\w[^-]+)\}',replace,line) 

编辑:

我在 Python 2 中运行时收到以下错误:

def main(): 
while(1): 
    line = raw_input("(%s)$ " % ncmd) 
    line = re.sub(r''' 
                    \$\{([0-9]+)\}| 
                    \$([0-9]+)| 
                    \$\{(\w+?\=\w?+)\}| 
                    [^\\]\$(\w[^-]+)| 
                    [^\\]\$\{(\w[^-]+)\} 
                  ''',replace,line,re.VERBOSE) 
    print '>> ' + line 

错误:

(1)$ abc 
Traceback (most recent call last): 
  File "Test.py", line 4, in <module> 
    main() 
  File "Test.py", line 2, in main 
    [^\\]\$\{(\w[^-]+)\}''',replace,line,re.VERBOSE) 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 151, in sub 
    return _compile(pattern, flags).sub(repl, string, count) 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 242, in _compile 
    raise error, v # invalid expression 
sre_constants.error: multiple repeat 

请您参考如下方法:

您可以使用 triple-quoted (multi-line) string并设置 re.VERBOSE标志,它允许您在多行上打破正则表达式模式:

line = re.sub(r''' 
\$\{([0-9]+)\}| 
\$([0-9]+)| 
\$\{(\w+?\=\w?+)\}| 
[^\\]\$(\w[^-]+)| 
[^\\]\$\{(\w[^-]+)\} 
''', replace, line, re.VERBOSE) 

您甚至可以直接在字符串中包含注释:

line = re.sub(r''' 
\$\{([0-9]+)\}|             # Pattern 1 
\$([0-9]+)|                 # Pattern 2 
\$\{(\w+?\=\w?+)\}|         # Pattern 3 
[^\\]\$(\w[^-]+)|           # Pattern 4 
[^\\]\$\{(\w[^-]+)\}        # Pattern 5 
''', replace, line, re.VERBOSE) 

最后,应该注意的是,您同样可以通过使用 re.X 或将 (?x) 放在正则表达式模式的开头来激活详细标志.