我有一个包含这个正则表达式的python脚本:
expression1 = ur'(.*?),\s(.*)\s(sold(?: post-exercise)?|bought|purchased|awarded|exercised|transferred in|transferred out|re-invested)\s*([\d,]*).*price of\s*(\d*.\d+?p)'
Python解析器barfs并且抱怨它的语法无效。
为什么Python 3中的这种语法无效,但在Python 2中有效。 有没有办法可以用它来编写两个版本?
答案 0 :(得分:4)
Python 2 ur
字符串与Python 3存在奇怪的不兼容性,其中\u
和\U
转义仍将被处理而不是“原始”。在3.3版本中将u
前缀重新引入Python 3时,explicit decision会排除ur
组合,而不是行为不一致。
如果你想要一个适用于Python 2和3的原始Unicode字符串,你需要一个解决方法。可能性包括使用br
原始字节串并使用适当的编解码器将其转换为Unicode,或使用from __future__ import unicode_literals
并使用普通r
前缀。关注\u
和\U
转义。
答案 1 :(得分:2)
Python 3中的所有字符串都是 unicode ,因此不需要前导u
。只需删除MERGE (a {id:'a'})
ON MATCH SET a.value = a.value+2;
即可使其与Python 3一起使用。
答案 2 :(得分:1)
我想说使用Python 2/3互操作性的最佳方法是使用:
from __future__ import unicode_literals
然后只需删除u
即可。如果你明确需要字节,那么b"these are byte-strings"
将适用于2/3。