Python-100-Days: Day12 Strings and Regular Expressions

 1.使用正则表达式

1.1正则表达式相关知识

编写处理字符串的程序或网页会经常用到正则表达式对某些复杂规则的字符串进行处理。正则表达式就是一工具。用于描述复杂规则的工具。定义了字符串的匹配模式(如何检查一个字符串是否有跟某种模式匹配的部分或者从一个字符串中将与模式匹配的部分提取出来或者替换掉)。如果你在Windows操作系统中使用过文件查找并且在指定文件名时使用过通配符(*和?),那么正则表达式也是与之类似的用来进行文本匹配的工具,只不过比起通配符正则表达式更强大,它能更精确地描述你的需求(当然你付出的代价是书写一个正则表达式比打出一个通配符要复杂得多,要知道任何给你带来好处的东西都是有代价的,就如同学习一门编程语言一样)。

关于正则表达式的相关知识,可以阅读一下,《正则表达式30分钟入门教程》,以下是我们对正则表达式中的一些基本符号的相应总结。

1.2 Python对正则表达式的支持

1.3 验证输入用户名和QQ号是否有效并给出对应的提示信息。

"""
验证输入用户名和QQ号是否有效并给出对应的提示信息

要求:
用户名必须由字母、数字或下划线构成且长度在6~20个字符之间
QQ号是5~12的数字且首位不能为0
"""

import re

def main():
    username = input('请输入用户名: ')
    qq = input('请输入QQ号:')
    m1 = re.match(r'^[0-9a-zA-Z_]{6,20}$', username)
    if not m1:
        print('请输入有效的用户名.')
    m2 = re.match(r'^[1-9]\d{4,11}$', qq)
    if not m2:
        print('请输入有效的QQ号.')
    if m1 and m2:
        print('你输入的信息是有效的!')

if __name__ == '__main__':
    main()

 1.4 从一段文字中提取出国内手机号码。


import re


def main():
    # 创建正则表达式对象 使用了前瞻和回顾来保证手机号前后不应该出现数字
    pattern = re.compile(r'(?<=\D)(1[38]\d{9}|14[57]\d{8}|15[0-35-9]\d{8}|17[678]\d{8})(?=\D)')
    sentence = '''
    重要的事情说8130123456789遍,我的手机号是13512346789这个靓号,
    不是15600998765,也是110或119,王大锤的手机号才是15600998765。
    '''
    # 查找所有匹配并保存到一个列表中
    mylist = re.findall(pattern, sentence)
    print(mylist)
    print('--------华丽的分隔线--------')
    # 通过迭代器取出匹配对象并获得匹配的内容
    for temp in pattern.finditer(sentence):
        print(temp.group())
    print('--------华丽的分隔线--------')
    # 通过search函数指定搜索位置找出所有匹配
    m = pattern.search(sentence)
    while m:
        print(m.group())
        m = pattern.search(sentence, m.end())


if __name__ == '__main__':
    main()

1.5 替换字符串中的不良内容

"""
不良内容过滤
"""
import re


def main():
    sentence = '你丫是傻叉吗? 我操你大爷的. Fuck you.'
    purified = re.sub('[操肏艹]|fuck|shit|傻[比屄逼叉缺吊屌]|煞笔',
                      '*', sentence, flags=re.IGNORECASE)
    print(purified)


if __name__ == '__main__':
    main()

2.字符串常用操作

"""
字符串常用操作

Version: 0.1
Author: Maxwell
Date: 2024-05-08
"""

import pyperclip

# 转义字符
print('My brother\'s name is \'007\'')
#原始字符串
print(r'My brother\'s name is \'007\'')

str = 'hello123world'
print('he' in str)
print('her' in str)
# 字符串是否只包含字母
print(str.isalpha())
#字符串是否只包含字母和数字
print(str.isalnum())
# 字符串是否只包含数字
print(str.isdecimal())

print(str[0:5].isalpha())
print(str[5:8].isdecimal())

list = ['床前明月光','疑是地上霜','举头望明月','低头思故乡']
print('-'.join(list))
sentence = 'You go your way I will go mine'
word_list = sentence.split()
print(word_list)
email = '          maxwellpan@1234.com          '
print(email)
print(email.strip())
print(email.lstrip())


# 将文本放入系统剪切版中
pyperclip.copy('老虎不发福你还不知道我是个胖子呀')
#从系统剪切版获得文本
#print(pyperclip.paste())

3.字符串常用操作——实现字符串倒转的方法

"""
字符串常用操作 - 实现字符串倒转的方法

Version: 0.1
Author: Maxwell
Date: 2024-05-08
"""

from io import StringIO

def reverse_str1(str):
    return str[::-1]

def reverse_str2(str):
    if len(str) <= 1:
        return str
    return reverse_str2(str[1:]) + str[0:1]


def reverse_str3(str):
    # StringIO对象是Python中的可变字符串
    # 不应该使用不变字符串连接操作,因为会产生很多无用字符串对象。
    rstr = StringIO()
    str_len = len(str)
    for index in range(str_len -1, -1, -1):
        rstr.write(str[index])
    return rstr.getvalue()

def reverse_str4(str):
    return ''.join(str[index] for index in range(len(str) - 1, -1, -1))


def reverse_str5(str):
    # 将字符串处理成列表
    str_list = list(str)
    str_len = len(str)
    # 使用zip函数将两个序列合并成一个产生元组的迭代器
    # 每次正好可以取到一前一后两个下标来实现元素的交换
    for i, j in zip(range(str_len // 2), range(str_len - 1, str_len // 2, -1)):
        str_list[i], str_list[j] = str_list[j], str_list[i]
    
    # 将列表元素连接成字符串
    return ''.join(str_list)

if __name__ == '__main__':
    str = 'I love Python'
    print(reverse_str1(str))
    print(str)
    print(reverse_str2(str))
    print(str)
    print(reverse_str3(str))
    print(str)
    print(reverse_str4(str))
    print(str)
    print(reverse_str5(str))
    print(str)


4. Github

Python-100-Days-Maxwell/Day01-15/code/Day12 at main · psmaxwell/Python-100-Days-Maxwell · GitHub

 

倘若您觉得我写的好,那么请您动动你的小手粉一下我,你的小小鼓励会带来更大的动力。Thanks.

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值