Python从入门到项目实践

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Harrytsz/article/details/85015883

Chapter 7 字符串与正则表达式

7.1.2 计算字符串的长度

str1 = '人生苦短,我用Python!'
length1 = len(str1)
print("length1: ", length1)

length1: 14

从上面的结果中可以看出,在默认的情况下,通过len()函数计算字符串的长度时,不区分英文、数字和汉字,所有字符都认为是一个。

在实际开发时,有时需要获取字符串实际所占的字节数,即如果采用UTF-8编码,汉字占3个字节,采用GBK或者GB2312时,汉字占2个字节。这时,可以通过使用encode()方法进行编码后再进行获取。例如,如果要获取采用UTF-8编码的字符串的长度,可以使用下面的代码:

str2 = '人生苦短,我用Python!'
length2 = len(str2.encode())
print("length2: ", length2)

length2: 28

如果要获取采用GBK编码的字符串的长度,可以使用下面的代码:

str3 = '人生苦短,我用Python!'
length3 = len(str3.encode('gbk'))
print("length3: ", length3)

length3: 21

str4 = '人生苦短,我用Python!'
try:
    substr = str4[15]
except IndexError:
    print('指定的索引不存在!')

指定的索引不存在!

7.1.4 分割字符串

str1 = '明 日 学 院 官 网     >>>      www.mingrisoft.com'
print('原字符串:', str1)
list1 = str1.split()
list2 = str1.split('>>>')
list3 = str1.split('.')
list4 = str1.split(' ', 4)
print(str(list1) + '\n' + str(list2) + '\n' + str(list3) + '\n' + str(list4))
list5 = str1.split('>')
print(str(list5))
原字符串: 明 日 学 院 官 网     >>>      www.mingrisoft.com
['明', '日', '学', '院', '官', '网', '>>>', 'www.mingrisoft.com']
['明 日 学 院 官 网     ', '      www.mingrisoft.com']
['明 日 学 院 官 网     >>>      www', 'mingrisoft', 'com']
['明', '日', '学', '院', '官 网     >>>      www.mingrisoft.com']
['明 日 学 院 官 网     ', '', '', '      www.mingrisoft.com']

7.1.5 检索字符串

1.count()方法

str.count(sub[, start[, end]])

str1 = '@明日科技 @雷军 @马斯克'
print('字符串“', str1, '”中包括:', str1.count('@'), '个 @ 符号')

字符串“ @明日科技 @雷军 @马斯克 ”中包括: 3 个 @ 符号

2.find()方法

str.find(sub[, start[, end]])

str1 = '@明日科技 @雷军 @马斯克'
print(str1.find('@'))
print(str1.rfind('@'))

0
10

3.index()方法

str.index(sub[, start[, end]])

str1 = '@明日科技 @雷军 @马斯克'
print(str1.index('@'))
print(str1.rindex('@'))
print(str1.index('*'))  # 抛出异常

0
10

---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

<ipython-input-22-d037fee938f0> in <module>()
      2 print(str1.index('@'))
      3 print(str1.rindex('@'))
----> 4 print(str1.index('*'))


ValueError: substring not found

4.startswith()方法

str.startswith(prefix[, start[, end]])

str1 = '@明日科技 @雷军 @马斯克'
print(str1.startswith('@'))
print(str1.startswith('明'))

True
False

5.endswith()方法

str.endswith(suffix[, start[, end]])

str1 = 'http://www.mingrisoft.com'
print(str1.endswith('.com'))

True

7.1.6 字母的大小写转换

1.lower()方法

str.lower()

str1 = 'WWW.Mingrisoft.com'
print("原字符串:", str1)
print("新字符串:", str1.lower())

原字符串: WWW.Mingrisoft.com
新字符串: www.mingrisoft.com

2.upper()方法

str.upper()

str1 = 'WWW.MingriSoft.com'
print("Original String: ", str1)
print("New String: ", str1.upper())

Original String: WWW.MingriSoft.com
New String: WWW.MINGRISOFT.COM

7.1.7 去除字符串中的空格和特殊字符

1.strip()方法

str.strip([chars])

str1 = 'http://www.mingrisoft.com  \t\n\r'
print('Original String str1: '+ str1 + '.')

Original String str1: http://www.mingrisoft.com
.

print('New String: ' + str1.strip() + '.')

New String: http://www.mingrisoft.com.

str2 = '@明日科技.@.'
print('Original String str2: ' + str2 + '.')

Original String str2: @明日科技.@…

print('New String: ' + str2.strip('@.') + '.')

New String: 明日科技.

2.lstrip()方法

str.lstrip([chars])

3.rstrip()方法

str.rstrip([chars])

7.1.8 格式化字符串

1.使用 “%” 操作符

‘%[-][+][0][m][.n]格式化字符’%exp

参数说明:

: &#x27;-&#x27;: 可选参数,用于指定左对齐,正数前方无符号,负数前面加负号。
+ : &#x27;+&#x27;: 可选参数,用于指定右对齐,正数前方加正号,负数前面加负号。
0 : &#x27;0&#x27;: 可选参数,表示右对齐,正数前面元符号,负数前面加负号,用0填充空白处(一般与m参数一起使用)。
m : &#x27;m&#x27;: 可选参数,表示占有宽度。
. n : &#x27;.n&#x27;: 可选参数,表示小数点后保留的位数。
格式化字符:用于指定类型,其值如下表所示:

格式字符 说明 格式字符 说明
%s 字符串(采用str()显示) %r 字符串(采用repr()显示)
%c 单个字符 %o 八进制整数
%d 或 %i 十进制整数 %e 指数(基底写为e)
%x 十六进制整数 %E 指数(基底写为E)
%f 或 %F 浮点数 %% 字符%
template = '编号:%09d \t公司名称: %s  \t官网: http://www.%s.com'
context1 = (7, '百度', 'baidu')
context2 = (8, '明日学院', 'mingrisoft')
print(template%context1)
print(template%context2)

编号:000000007 公司名称: 百度 官网: http://www.baidu.com
编号:000000008 公司名称: 明日学院 官网: http://www.mingrisoft.com

2.使用字符串对象的 format() 方法

str.format(args)

template = '编号: {:0>9s} \t公司名称: {:s}  \t官网: http://www.{:s}.com'
context1 = template.format('3', '百度', 'baidu')
context2 = template.format('4', '明日科技', 'mingrisoft')
print(context1)
print(context2)

编号: 000000003 公司名称: 百度 官网: http://www.baidu.com
编号: 000000004 公司名称: 明日科技 官网: http://www.mingrisoft.com

7.3 使用 re 模块实现正则表达式操作

7.3.1 匹配字符串

re.match(pattern ,string, [flags])

参数说明:

pattern:表示模式字符串,由要匹配的正则表达式转换而来。

string:表示要匹配的字符串。

flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如下表所示:

标志 说明
A 或 ASCII 对于\w、\W、\b、\B、\d、\D、\s 和 \S 只进行 ASCII 匹配
I 或 IGNORECASE 执行不区分字母大小写的匹配
M 或 MULTILINE 将 ^ 和 $ 用于包括整个字符串的开始和结尾的每一行
S 或 DOTALL 使用(.)字符匹配所有字符,包括换行符
X 或 VERBOSE 忽略模式字符串中未转义的空格和注释
import re 
pattern = r'mr_\w+'
string = 'MR_SHOP mr_shop'
match = re.match(pattern, string, re.I)
print(match)

string = '项目名称MR_SHOP mr_shop'
match = re.match(pattern , string, re.I)
print(match)

<_sre.SRE_Match object; span=(0, 7), match=‘MR_SHOP’>
None

import re
pattern = r'mr_\w+'
string = 'MR_SHOP mr_shop'
match = re.match(pattern, string, re.I)
print("Start: ", match.start())
print("End: ", match.end())
print("Location: ", match.span())
print("String: ", match.string)
print("Data: ", match.group())

Start: 0
End: 7
Location: (0, 7)
String: MR_SHOP mr_shop
Data: MR_SHOP

猜你喜欢

转载自blog.csdn.net/Harrytsz/article/details/85015883