긴 정규 표현식을 작은 덩어리로 분해하려고합니다. A에서 B로 변경하는 것이 가능한가/좋은 습관입니까?일반 표현식에서 줄 바꿈
A :
line = re.sub(r'\$\{([0-9]+)\}|\$([0-9]+)|\$\{(\w+?\=\w?+)\}|[^\\]\$(\w[^-]+)|[^\\]\$\{(\w[^-]+)\}',replace,line)
B :
line = re.sub(r'\$\{([0-9]+)\}|'
r'\$([0-9]+)|'
r'\$\{(\w+?\=\w?+)\}|'
r'[^\\]\$(\w[^-]+)|'
r'[^\\]\$\{(\w[^-]+)\}',replace,line)
편집 : 파이썬 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
오류 : 당신은 triple-quoted (multi-line) string를 사용하고 여러 줄에 걸쳐 정규식 패턴을 깰 수있는 re.VERBOSE
플래그를 설정할 수 있습니다
(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
를 지금까지 내가이 자주 사용됩니다 알고, 때로는 정규식 부분을 설명하는 각 라인에 대한 자세한 설명과 함께. – TidB
'확장'모드를 사용하는 것이 더 낫습니다. 또한 정규식에 문제가 있습니다. 예를 들어'\ $ (\ w [^ -] +)'와'\ $ \ {(\ w [^ -] +) \}'는 끝이 없습니다. – sln