在Python3.4中使用正则表达式的语法无效 [英] Invalid syntax using regular expression in python 3.4
本文介绍了在Python3.4中使用正则表达式的语法无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在python3.4中使用了以下表达式,它给出了语法错误,但相同的代码在python2.7中仍然有效
block = re.compile(ur'DATA(value)[S ]+s((?:(?![^
]+DATA(value2)).)*)', re.IGNORECASE | re.DOTALL)
我不确定此表达式中的真正问题是什么
推荐答案
Python3没有ur'...'
原始Unicode字符串语法。请改用r'...'
:
block = re.compile(
r'DATA(value)[S ]+s((?:(?![^
]+DATA(value2)).)*)',
re.IGNORECASE | re.DOTALL)
如果您需要创建与Python交叉兼容的代码,则必须使用条件代码将r'...'
生成的字节串解码为仅在Python2上的unicode
对象。类似six
的模块可以帮助实现这一点:
from six import u
block = re.compile(
u(r'DATA(value)[S ]+s((?:(?![^
]+DATA(value2)).)*)'),
re.IGNORECASE | re.DOTALL)
或者您可以创建自己的兼容层;对于本地一次性测试,您可以查看是否存在str.decode()
方法:
_block_pattern = r'DATA(value)[S ]+s((?:(?![^
]+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)
这篇关于在Python3.4中使用正则表达式的语法无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文