python 3.4中使用正则表达式的语法无效
我在Python3.4中使用了下面的表达式,它给出了语法错误,但在Python2.7中使用了相同的代码python 3.4中使用正则表达式的语法无效,python,regex,python-3.x,python-3.4,Python,Regex,Python 3.x,Python 3.4,我在Python3.4中使用了下面的表达式,它给出了语法错误,但在Python2.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
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'…'
生成的字节字符串解码为仅在Python 2上使用的unicode
对象。类似这样的模块可以帮助实现这一点:
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)