python编码与re模块

使用chardet模块来判断数据的编码;输入参数为str类型。

#coding:utf-8
import chardet
f =open('hadoop.txt','r')     #打开文本文件,只读
about=f.read()         #读取文本内容
print cchardet.detect(about)       #判断字符串编码
#将字符串的原编码先转成unicode编码,再转成utf-8编码 print about.decode('gbk').encode('utf-8')

正则表达式——查找符合匹配的字符串。      

定位符
^              匹配字符串的开始,如^itcast,匹配以"itcast"开头的字符串
$               匹配字符串的结束,如itcast$,匹配以"itcast"结尾的字符串
\b              匹配单词的开始或结束,例如er\b 该表达式表示匹配er和空格之间的位置,如可以匹配"never"中的"er",但不能匹配"verb"中的"er"
\B              匹配非单词边界,与上面\b相反


确定范围符号(一般来说,编写正则表达式不要有空格,否则会被认为是要匹配一个空格,或者特殊字符被认为普通字符。)
.               匹配除换行符以外的任意字符
[]              一个方括号代表只匹配一个字符,注意[]内不要有空格,否则会被认为是要匹配一个空格。
[^]            反义,例如[^1234567890],匹配除数字以外任意字符。
|               这里代表‘或者’
-               连接范围,例如[a-zA-Z],任意一个存在26个字母里的字符都可以匹配,不区分大小写。
\               转义字符,将特殊字符转成普通字符
()              1、改变限定符范围,2、分组。

\s              匹配任何不可见字符,包括空格、制表符、换页符等等。

\S             匹配任何可见字符。

\t              匹配一个制表符。


限定符(重复次数)
*               重复零次或更多次
+              重复一次或更多次
?              重复零次或一次
{n}           重复n次
{n,}          重复n次或更多次
{n,m}       重复n到m次

python之re模块

                  pattern: 正则模型

                  repl:要替换的字符串或可执行对象
                  string : 要匹配的字符串
                  count : 指定替换个数,默认为0,表示每个匹配项都替换。
                  flags : 匹配模式,用于控制正则表达式的匹配方式

1、match(pattern, string, flags=0)

从字符串的开始根据正则模型匹配指定内容,匹配单个(只找一个)。

 

2、search(pattern, string, flags=0)

在字符串内根据正则模型匹配指定内容,匹配单个(只找一个),如果字符串没有匹配,则返回None。

 

3、group和groups

groups():表示从group(1)开始往后的所有值,组合成一个元组类型的值;
group():表示取全部匹配的字符串或者指定的组,返回结果是一个字符串;

   注意,如果匹配多次,只有最后一个匹配可以访问,如下代码:

1 m = re.match(r"(..)+", "a1b2c3") 
2 m.group(1) 
3 print m.group(1)

     m.group(1)的返回结果为"c3",而不是"a1"。

 

4、sub(pattern, repl, string, count=0, flags=0)

 re.sub用于替换字符串中的匹配项。                              

下面一个例子将字符串中的空格 ' ' 替换成 '-' :  

import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print re.sub(r'\s+', '-', text)

re.sub还允许使用函数对匹配项的替换进行复杂的处理。如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。

 

5、split(pattern, string, maxsplit=0, flags=0)

可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。

相当于以正则模型为基准,将匹配部分的左右两边字符串分割,并丢掉匹配部分;

如果在以正则模型部分加上"()"之后所切出的结果,会保留了匹配的项。

 

6、findall(pattern, string, flags=0)

  re.findall可以获取字符串中所有匹配的字符串。如:re.findall(r'\w*oo\w*', text);获取字符串中,包含'oo'的所有单词。

 

7、re.compile

  可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。下面是一个正则表达式对象的一个例子:

1
2
3
4
5
import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
regex = re.compile(r'\w*oo\w*')
print regex.findall(text)   #查找所有包含'oo'的单词
print regex.sub(lambda m: '[' + m.group(0+ ']', text) #将字符串中含有'oo'的单词用[]括起来。
posted @ 2017-05-24 23:04  兰昌  阅读(694)  评论(0编辑  收藏  举报