我想创建一个包含评论和变量的正则表达式。我以为我会像这样拆分字符串,但这是行不通的:
import re
regex = re.compile(r'''
^(sm\d{5}-[a-z]+-\d{2}) # study number''' +
doctype + r'''# document
v(\d+)-(\d+) # version number
\.pdf$ # pdf extension
''', re.VERBOSE)
答案 0 :(得分:4)
将您的正则表达式模式分成多个字符串,然后用"".join()
将它们组合成一个字符串,就像这样
import re
pattern = "".join([
"^(sm\d{5}-[a-z]+-\d{2})", # study number
doctype, # document
"v(\d+)-(\d+)", # version number
"\.pdf$", # pdf extension
])
regex = re.compile(pattern, re.VERBOSE)
为避免注释,可以在正则表达式的每个部分使用描述性变量名称。这样,将行定位字符与正则表达式的“业务逻辑”分开以使这些变量更可重用也可能很有意义。
study_number_pattern = "(sm\d{5}-[a-z]+-\d{2})"
version_number_pattern = "v(\d+)-(\d+)"
pdf_extension_pattern = "\.pdf"
pattern = "".join([
"^",
study_number_pattern,
doctype,
version_number_pattern,
pdf_extension_pattern,
"$"
])
regex = re.compile(pattern, re.VERBOSE)
答案 1 :(得分:0)
您的串联符号和该模式第二行的引号中的引号(''')已与注释一起注释掉;只需将其移到评论前面即可。
我将两个加号放在一行上,但是您仍然可以将它们分成多个,这只是我的偏好...
regex = re.compile(r'''
^(sm\d{5}-[a-z]+-\d{2})''' # study number
+ doctype + # document
r'''v(\d+)-(\d+) # version number
\.pdf$ # pdf extension
''', re.VERBOSE)
在相关说明中,您是否使用IDE或任何文本编辑器来编写代码?如果没有,那将很有帮助。这样的错误会立即被发现并突出显示。
编辑:
堆栈溢出语法高亮显示,似乎带有注释“版本号”和“ pdf扩展名”的行是上面代码中模式的一部分,但是使用re.VERBOSE标志可以使它们成为实际注释。