正则表达式 - 弃用警告
Regex expressions - Deprecation warning
以下代码片段来自我的 github 存储库 here。
它打开一个二进制文件,并提取 标签内的文本。这些是关键行:
gbxfile = open(filename,'rb')
gbx_data = gbxfile.read()
gbx_header = b'(<header)((?s).*)(</header>)'
header_intermediate = re.findall(gbx_header, gbx_data)
该脚本有效,但它收到以下弃用警告:
DeprecationWarning: Flags not at the start of the expression b'(<header)((?s).*)(</' (truncated)
header_intermediate = re.findall(gbx_header, gbx_data)
gbx_header
中正则表达式的正确用法是什么,才不会显示这个警告?
您可以查看Python bug tacker Issue 39394,该警告是在Python 3.6.
中引入的
重点是 Python re
现在不允许在不在字符串开头的地方使用内联修饰符。在 Python 2.x 中,您可以毫无问题地使用您的模式和警告,因为 (?s)
会在幕后默默地应用于整个正则表达式。由于这并不总是预期的行为,Python 开发人员决定发出警告。
请注意,您现在可以在 Python re
中使用内联修饰符组,请参阅 。
所以,解决方案是
- 在模式的开头放置
(?s)
(或任何其他内联修饰符):(?s)(<header)(.*)(</header>)
- 使用
re
选项,re.S
/re.DOTALL
代替(?s)
,re.I
/re.IGNORECASE
代替(?i)
,等等
- 使用变通方法(而不是
.
,如果您不想使用 (?s)
或 [=16,请使用 [\w\W]
/[\d\D]
/[\s\S]
=]/re.DOTALL
).
以下代码片段来自我的 github 存储库 here。
它打开一个二进制文件,并提取
gbxfile = open(filename,'rb')
gbx_data = gbxfile.read()
gbx_header = b'(<header)((?s).*)(</header>)'
header_intermediate = re.findall(gbx_header, gbx_data)
该脚本有效,但它收到以下弃用警告:
DeprecationWarning: Flags not at the start of the expression b'(<header)((?s).*)(</' (truncated)
header_intermediate = re.findall(gbx_header, gbx_data)
gbx_header
中正则表达式的正确用法是什么,才不会显示这个警告?
您可以查看Python bug tacker Issue 39394,该警告是在Python 3.6.
中引入的重点是 Python re
现在不允许在不在字符串开头的地方使用内联修饰符。在 Python 2.x 中,您可以毫无问题地使用您的模式和警告,因为 (?s)
会在幕后默默地应用于整个正则表达式。由于这并不总是预期的行为,Python 开发人员决定发出警告。
请注意,您现在可以在 Python re
中使用内联修饰符组,请参阅
所以,解决方案是
- 在模式的开头放置
(?s)
(或任何其他内联修饰符):(?s)(<header)(.*)(</header>)
- 使用
re
选项,re.S
/re.DOTALL
代替(?s)
,re.I
/re.IGNORECASE
代替(?i)
,等等 - 使用变通方法(而不是
.
,如果您不想使用(?s)
或 [=16,请使用[\w\W]
/[\d\D]
/[\s\S]
=]/re.DOTALL
).