1
Cee 2015-05-07 13:44:39 +08:00
三個 \x** 一組 轉換成漢字
|
2
fzinfz 2015-05-07 13:59:05 +08:00
In [30]: s = b'\xe7\xa9\xbf\xe5\xb1\xb1\xe7\x94\xb2\xe5\x88\xb0'
In [31]: sd = s.decode('utf-8') In [32]: sd Out[32]: '穿山甲到' In [33]: rs = re.search('山',sd) In [34]: rs Out[34]: <_sre.SRE_Match object; span=(1, 2), match='山'> |
3
huanglk 2015-05-07 14:06:25 +08:00
re.compile(r'^([\x80-\xff]{3})+$')
|
4
liuhaotian 2015-05-07 14:07:17 +08:00
穿山甲到底说了什么?
这个是汉字的 utf-8 编码 我只会 php 就用 php,用 php 做了一个快速转换的 sample : http://cloud.vexio.net/prog/za/utf8_decode.php 核心部分就是:urldecode(str_replace('\x','%',$input)); |
5
likuku 2015-05-07 15:14:55 +08:00
试试:
str.encode('utf-8') 正则没用过,但 count 和 find 都可。 py 头部加 # encoding: utf-8 str.encode('utf-8').count(u'中文') str.encode('utf-8').find(u'中文') python 2.7 下。 |
6
likuku 2015-05-07 15:17:00 +08:00
python 2.x 使用引号字串前加 u 来明确使用 utf-8 编码,否则中文不行。
|
7
buginux 2015-05-07 18:41:12 +08:00
书籍的话,推荐楼主去看看《正则指引》, 余晟老师写的,是国内的正则书,里面有关于中文的。
|
8
imn1 2015-05-07 19:46:40 +08:00
先判断类型
如果是string,就按latin-1转为bytes,decode utf-8 如果本身就是bytes,直接decode就行了 |
9
imn1 2015-05-07 20:03:25 +08:00
>>> s='\xe7\xa9\xbf\xe5\xb1\xb1\xe7\x94\xb2\xe5\x88\xb0\xe5\xba\x95\xe8\xaf\xb4\xe4\xba\x86\xe4\xbb\x80\xe4\xb9\x88\xef\xbc\x9f'
>>> s.encode('latin-1').decode('utf-8') '穿山甲到底说了什么?' >>> >>> s=b'\xe7\xa9\xbf\xe5\xb1\xb1\xe7\x94\xb2\xe5\x88\xb0\xe5\xba\x95\xe8\xaf\xb4\xe4\xba\x86\xe4\xbb\x80\xe4\xb9\x88\xef\xbc\x9f' >>> s.decode('utf-8') '穿山甲到底说了什么?' 第一个s是string,第二个s是bytes 错误的例子: >>> s='\xe7\xa9\xbf\xe5\xb1\xb1\xe7\x94\xb2\xe5\x88\xb0\xe5\xba\x95\xe8\xaf\xb4\xe4\xba\x86\xe4\xbb\x80\xe4\xb9\x88\xef\xbc\x9f' >>> s.encode('utf-8').decode('utf-8') 'ç©¿å±±ç\x94²å\x88°åº\x95说äº\x86ä»\x80ä¹\x88ï¼\x9f' 用 utf-8 或者 ascii 来 encode 都是不对的 |
10
picasso250 2015-05-08 13:55:55 +08:00
做爬虫,请用PHP或者python3。
人生苦短。 |
11
picasso250 2015-05-08 13:56:25 +08:00
比如 preg_match('/我就是要处理中文/u', $html_code);
|
12
ultimate010 2015-05-08 14:06:54 +08:00 via iPhone
2和9正解,用好decode encode python 2正则很好弄,建议用lxml库。
|
13
commoccoom OP @picasso250
python 2.7 有什么坑吗? |
14
caomaocao 2015-05-08 16:48:44 +08:00
可以用这个%\w{2}){3,} 但要主要gbk编码的...
|
15
commoccoom OP @ultimate010 再问一个问题:为什么 "^[0\\\-9]$" 和 "^[0\\\\-9]$" 是等价的?
|
16
ultimate010 2015-05-10 09:12:55 +08:00 via iPhone
|
17
commoccoom OP @ultimate010
我用 r"^[0\\-9]$" == "^[0\\\-9]$" 返回True 用 r"^[0\\-9]$" == "^[0\\\\-9]$" 返回True "^[0\\\-9]$" == "^[0\\\\-9]$" 同样返回 True 这样我就看不懂了。 |
18
ultimate010 2015-05-10 12:06:15 +08:00
In [1]: a = "^[0\\\-9]$"
In [2]: a Out[2]: '^[0\\\\-9]$' In [3]: b = "^[0\-9]" In [4]: b Out[4]: '^[0\\-9]' In [5]: c = "^[0\\\\-9]" In [6]: c Out[6]: '^[0\\\\-9]' 我理解 "^[0\\\-9]$" 这种情况,前两个'\\'表示转义'\'就是原始'\',后面单独的'\'后是'-',不是转义情况,所以理解为'\',存储是表示成转义'\',所以输出中有'\\\\'四个'\'。 In [1]: r"^[0\\-9]$" Out[1]: '^[0\\\\-9]$' 加了r后,就自动帮你加了转义需要的'\'。 |