python 里面的re 正则问题

>>> pattern=re.compile("^[$¥]") 
>>>sssss1=pattern.findall("¥未透露")
>>> sssss1
['\xef']

我是想匹配前面的美元符号 ”¥"但出现了 'xef' 这怎么解释?

阅读 2.2k
3 个回答

字节与字符的区别。 Python 2.x 环境下,你那样写,找出的是第一个字节。

>>> pattern=re.compile(u"^[$¥]") 
>>> sssss1=pattern.findall(u"¥未透露")
>>> sssss1
[u'\uffe5']
>>> print sssss1
[u'\uffe5']
>>> print sssss1[0]
¥
>>> 

¥ 为 xefxbfxa5
所以正则"^[$¥]" == "^[$xefxbfxa5]"
因此就匹配第一个了

In [7]: '¥'
Out[7]: '\xef\xbf\xa5'

In [8]: pattern=re.compile("^[$¥]")

In [9]: sssss1=pattern.findall("¥未透露")

In [10]: sssss1
Out[10]: ['\xef']

解决方法: 使用分组


In [24]: pattern=re.compile("^(¥)|^(\$)")

In [25]: pattern.findall("¥未透露")
Out[25]: [('\xef\xbf\xa5', '')]

是字符编码问题,相同的代码在python 3.6里,sssss1=['¥'].

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题