【Python】-002-变量类型-字符串
2017-07-11 本文已影响25人
9756a8680596
字符串基本操作
- 运算符:+ \ *
a = 'mac'
b = 'book'
c = a + b //'macbook'
d = a * 2 //'macmac' - 切片,索引
text = 'c++ python3 python2 perl ruby lua java javascript C php5'
text[0:10:1] //start: end: step 'c++ python'
text[0] //'c' - 常用方法:
text.split(' ') //返回列表list,根据split里面的字符将字符串分割为字符串列表
'*'.join(a) //返回字符串,根据join前面的字符,将数组a链接为字符串
text.upper() //返回新字符串,将text里面的字母都进行大写
text.find('as') //返回首次匹配到的索引值,不存在返回-1
text.replace('python', 'HHH') //返回新字符串,原字符串不变
' aBC '.strip() //返回新字符串,去除单词首尾空格
print '%s is good.'%(text[4:11])
字符串转义
-
转义r' ',r表示原始字符
-
" ",可以包含里面的单引号,并正常显示
-
Unicode编码字符集,支持多种字符和语言,常用UTF-8编码方式
s = '用python做些事'
a = u'用python做些事' //表示采用Unicode字符集,编码方式UTF-8s //'\xe7\x94\xa8python\xe5\x81\x9a\xe4\xba\x9b\xe4\xba\x8b' a //u'\u7528python\u505a\u4e9b\u4e8b' print s //用python做些事 print a //用python做些事 len(s) //18 len(a) //10
-
在字符串使用中文时,建议采用类似变量a的声明方式,使用Unicode编码
-
在python用到中文,需要在头部增加
#coding: utf-8
re模块
常用方法
- 对字符串进行操作,文本解析工具,常用方法:
import re
re.match(p, text) //match()函数只在字符串开始位置尝试匹配正则表达式,返回MatchObject 的实例,匹配失败返回None
re.search(p, text) //search() 函数是扫描整个字符串来查找匹配,返回MatchObject 的实例,匹配失败返回None
re.findall(p, text) //在字符串中找到正则表达式所匹配的所有子串,并组成一个 列表 返回
re.split(p, text) //将字符串匹配正则表达式的部分割开,并返回一个列表
re.sub(p, s, text) //字符串 text 中找到匹配正则表达式 p 的所有子串,用另一个字符串 s 进行替换,返回?
//把正则表达式的模式和标识转化成正则表达式对象,供 match() 和 search() 这两个函数使用。
pattern = re.compile(p)
results = pattern.match(text)
Python正则表达式语法
-
^
/$
/.
- 从头开始匹配:
^
re.findall(r'c^', text).group() // 'c' - 匹配特定结尾:
$
re.findall(r'c$', text) //[] - 表示任意一个字符:
.
re.findall(r'^c..', text) //'c++'
-
+
/*
/?
/[]
/|
-
把前面的字符重复1-无穷次匹配:
+
re.findall(r'p+', text) //匹配p, pp, ppp, pppp…… -
把前面的字符重复0-无穷次匹配:
*
re.findall(r'p*', text) // -
把前面的字符重复0-1次匹配:
?
re.findall(r'p?', text) // -
字符集匹配:
[]
,[a-zA-Z0-9]
匹配所有字母和数字,[^6]
表示除了 6 以外的任意字符
re.findall(r'p[a-z]', text) //['py', 'py', 'pe', 'pt', 'ph']
re.findall(r'p[^a-z]', text) //['p5']
re.findall(r'p[0-9]+|j[0-9]', text) -
对于前一个字符重复 m 到 n 次:
{m, n}
re.findall(r'p[a-z]{3,}', text) //['python', 'python', 'perl'] -
只匹配其中一个表达式:
|
re.findall(r'p+[a-zA-Z]|j+[a-zA-Z]', text)
- 特殊表达式
- 匹配任意数字和字母,相当于
[a-zA-Z0-9_]
:\w
,\W
表示非 - 匹配任意十进制数,相当于
[0-9]
:\d
,\D
表示非 - 匹配任意空白字符,相当于
[\t\n\r\f\v]
:\s
,\S
表示非
re.findall(r'p\w+',text) //re.findall(r'p[0-9a-zA-Z]+',text)
re.findall(r'p\w+\d',text) //p开头,第二位是字母或者数字,最后一位是数字 - 贪婪模式和非贪婪模式,
+
|*
/?
|*?
,贪婪模式为尽可能多的匹配,非贪婪模式只匹配一次
re.findall(r'p[a-z]+', text)
re.findall(r'p[a-z]+?', text)
re.findall(r'p[a-z]', text)
re.findall(r'p[a-z]?', text)