1 前言
python关于字符串的操作很多,而正则化直接是打开新世界的大门。同一种说法,使用不同语言进行实现,就是完全不同的效果!这里先简单介绍几种最近使用到的字符串操作!
2 字符串的处理操作
2.1分割字符串
可以采用.split(“xx”),就是以xx为分割线进行分割。
刷题中对于题目的数据输入处理,常常需要我们自己对输入数据进行处理,那么就会涉及到字符串的分割。
line=input()
words=line.split(";")
例如:当input()为题目中的输入,那么当输入为10;20时,我们需要分割开来,就可以按照上面的方式进行使用。直接采用xx.split(“yy”)。这里的分割可以是字符、符号、空格都行。
在机试题中,使用python3来解答字符串的题,在题目解答开始就出现了分割:
for line in sys.stdin:
a = line.split()
sys.stdin 来逐行读取输入,并将每一行通过空格分割成多个部分,然后将分割后的结果存储在变量 a 中。
2.2拼接字符串
使用+或者.join()
" ".join(x):相当于空格加字符x;当需要不断将字符拼接成字符串时,可以利用for循环结合.join() 来完成操作。
例如:HJ18——识别有效的IP地址和掩码并进行分类统计,这里就使用到了拼接。
`x = [str(x1) ``for` `x1 in x]`
`print(``" "``.join(x))`
我们将字符形式的数据直接拼接成一个数据。
- 查找字符串:使用
find()或者index()
2.3正则表达式
使用import re
-
re.compile——制定规则(这里是指,我们可以利用正则化表达来进行数据区分)
$为结尾 .表示匹配任何字符 \d表示匹配任何数字字符 []来定义一个字符集合 *表示匹配前一个字符的0次或多次重复 +表示匹配前一个字符的1次或多次重复 ?表示匹配前一个字符的0次或1次重复 \来转义特殊字符
例如:HJ17——坐标移动
其中就有提到:合法坐标为A(或者D或者W或者S) + 数字(两位以内)
Python写法:就是利用正则化表达式进行书写过滤。
rule=re.compile(r'^[ASWD]\d{1,2}$')
[ASWD]就是定义一个字符集合
\d{1,2}就是匹配两位的数据字符
通过这样的形式,可以快速解决条件限制问题,简化代码。
C++写法:
if((arr[i].size() == 3) && (arr[i][1] >='0') && (arr[i][1] <= '9') && (arr[i][2] >='0') && (arr[i][2] <= '9'))
if((arr[i].size() == 2) && (arr[i][1] <= '9') && (arr[i][1] >= '0'))
C++的写法就相对复杂,通过二维数组需要使用条件语句进行判断。
- re.search——搜索
例如:HJ30——字符串合并:对排序后的字符串中的'0''9'、'A''F'和'a'~'f'字符,需要进行转换操作。
if re.search(r``'[0-9A-Fa-f]'``,x):
2.4enumerate
例如:HJ29——字符串加解密 找字符串中对应的字符的索引。一种比较好的办法就是直接列出大小写字符串,然后索引直接查找。这里就是使用到enumerate 例如:
L1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for a in line:
for index,char in enumerate(L1):
if char==a:
result+=L2[index]
这里就是在L1字符串中直接进行遍历,然后可判断char是否为我们想要的字符,然后进行索引处理。
2.5字符串中的大小写转化
upper()用于将字符串中的所有字符转换为大写lower()是大写转小写 经常有需要大小写转化,在c++中可能需要使用ASCii码或者其他方式进行转化,而python直接使用函数就处理掉了。 例如:HJ30——字符串合并就有转化操作,需要使用upper()
2.6 对齐加数
- rjust() 是字符串(str)对象的一个方法,用于将字符串右对齐并返回结果。
text = "x"print(text.rjust(2)) # 输出: ' x'
上面示例就是将x向右对齐,根据设置的长度,补齐剩下内容。
例如:HJ30——字符串合并就有需要将数据转化为二进制,并以四位数的形式进行翻转取值。这里需要将int变成二进制,然后补零操作,就使用到了rjust(),将二进制后的数据补零。
总结
正则化操作可以继续深入研究,python的正则化使用极大提升了效率!