在Python3.4中使用正则表达式的语法无效 [英] Invalid syntax using regular expression in python 3.4

查看:0
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆