我在 python 3.4 中使用以下表达式语法错误但相同的代码可以在 python 2.7 中运行
block = re.compile(ur'DATA\(value\)[\S ]+\s((?:(?![^\n]+DATA\(value2\)).)*)', re.IGNORECASE | re.DOTALL)
我不确定这个表达式的真正问题是什么
Python 3 没有ur'...'
原始 unicode 字符串语法。使用r'...'
反而:
block = re.compile(
r'DATA\(value\)[\S ]+\s((?:(?![^\n]+DATA\(value2\)).)*)',
re.IGNORECASE | re.DOTALL)
如果您需要创建跨 Python 兼容的代码,则必须使用条件代码来解码由r'...'
to a unicode
仅在 Python 2 上的对象。像这样的模块six http://pythonhosted.org/six/可以提供帮助:
from six import u
block = re.compile(
u(r'DATA\(value\)[\S ]+\s((?:(?![^\n]+DATA\(value2\)).)*)'),
re.IGNORECASE | re.DOTALL)
或者您可以创建自己的兼容层;对于本地一次性测试,您可以看看是否有str.decode()
方法介绍:
_block_pattern = r'DATA\(value\)[\S ]+\s((?:(?![^\n]+DATA\(value2\)).)*)'
if hasattr(_block_pattern, 'decode'):
# Python 2, decode to unicode first
_block_pattern = _block_pattern.decode('ascii')
block = re.compile(_block_pattern, re.IGNORECASE | re.DOTALL)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)