翼度科技»论坛 编程开发 python 查看内容

U4字符串以及正则表达式

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
Unit4字符串以及正则表达式

方法描述capitalize()把首字符转换为大写。casefold()把字符串转换为小写。center()返回居中的字符串。count()返回指定值在字符串中出现的次数。encode()返回字符串的编码版本。endswith()如果字符串以指定值结尾,则返回 true。expandtabs()设置字符串的 tab 尺寸。find()在字符串中搜索指定的值并返回它被找到的位置。format()格式化字符串中的指定值。format_map()格式化字符串中的指定值。index()在字符串中搜索指定的值并返回它被找到的位置。isalnum()如果字符串中的所有字符都是字母数字,则返回 True。isalpha()如果字符串中的所有字符都在字母表中,则返回 True。isdecimal()如果字符串中的所有字符都是小数,则返回 True。isdigit()如果字符串中的所有字符都是数字,则返回 True。isidentifier()如果字符串是标识符,则返回 True。islower()如果字符串中的所有字符都是小写,则返回 True。isnumeric()如果字符串中的所有字符都是数,则返回 True。isprintable()如果字符串中的所有字符都是可打印的,则返回 True。isspace()如果字符串中的所有字符都是空白字符,则返回 True。istitle()如果字符串遵循标题规则,则返回 True。isupper()如果字符串中的所有字符都是大写,则返回 True。join()把可迭代对象的元素连接到字符串的末尾。ljust()返回字符串的左对齐版本。lower()把字符串转换为小写。lstrip()返回字符串的左修剪版本。maketrans()返回在转换中使用的转换表。partition()返回元组,其中的字符串被分为三部分。replace()返回字符串,其中指定的值被替换为指定的值。rfind()在字符串中搜索指定的值,并返回它被找到的最后位置。rindex()在字符串中搜索指定的值,并返回它被找到的最后位置。rjust()返回字符串的右对齐版本。rpartition()返回元组,其中字符串分为三部分。rsplit()在指定的分隔符处拆分字符串,并返回列表。rstrip()返回字符串的右边修剪版本。split()在指定的分隔符处拆分字符串,并返回列表。splitlines()在换行符处拆分字符串并返回列表。startswith()如果以指定值开头的字符串,则返回 true。strip()返回字符串的剪裁版本。swapcase()切换大小写,小写成为大写,反之亦然。title()把每个单词的首字符转换为大写。translate()返回被转换的字符串。upper()把字符串转换为大写。zfill()在字符串的开头填充指定数量的 0 值。常用方法1

  1. s1 = "HelloWorld"
  2. new_s1 = s1.lower()
  3. print(s1, new_s1)
  4. s2 = new_s1.upper()
  5. print(new_s1,s2)
  6. #字符串的分割
  7. e_mail = "zhl@qq.com"
  8. lst = e_mail.split("@")
  9. print("邮箱名:", lst[0],"邮箱服务器域名:",lst[1])
  10. #统计出行次数
  11. print(s1.count("l"))
  12. #检索操作
  13. print(s1.find("o"))#首次出现位置
  14. print(s1.find("p"))#-1没有找到
  15. print(s1.index("o"))
  16. #print(s1.index("p"))#ValueError: substring not found
  17. #判断前缀和后缀
  18. print(s1.startswith("h"))
  19. print(s1.startswith("H"))
  20. print("demo.py".endswith(".py"))#True
  21. print("text.txt".endswith(".txt"))#Ture
复制代码
常用方法2

  1. s = "helloworld"
  2. #替换
  3. '''
  4.     def replace(self,
  5.             __old: str,
  6.             __new: str,
  7.             __count: SupportsIndex = ...) -> str
  8. '''
  9. new_s = s.replace("o","你好",1)#最后一个参数是替换次数,默认是全部替换
  10. print(s,new_s)
  11. '''
  12.     字符串在指定的宽度范围内居中
  13.     def center(self,
  14.            __width: SupportsIndex,
  15.            __fillchar: str = ...) -> str
  16. '''
  17. print(s.center(20))
  18. print(s.center(20, "-"))
  19. '''
  20.     去掉字符串左右的空格
  21.     def strip(self, __chars: str | None = ...) -> str
  22. '''
  23. s = "    hello    world   "
  24. print(s.strip())
  25. print(s.lstrip())
  26. print(s.rstrip())
  27. #去掉指定的字符 与顺序无关
  28. s3 = "dl_Helloworld"
  29. print(s3.strip("ld"))
  30. print(s3.lstrip("ld"))
  31. print(s3.rstrip("ld"))
复制代码
格式化

  1. name = "马冬梅"
  2. age = 18
  3. score = 98.4
  4. print("name:%s,age:%d,score:%.1f"%(name,age,score))
  5. #f-string
  6. print(f"name:{name},age:{age},score{score}")
  7. #format()
  8. print("name:{0},age{1},score{2}".format(name,age,score))
复制代码
详细格式
  1. s = "helloworld"
  2. print("{0:*<20}".format(s))
  3. print("{0:*>20}".format(s))
  4. print("{0:*^20}".format(s))
  5. #居中对齐
  6. print(s.center(20,"*"))
  7. #千位分隔符(只适用于整数和读点书
  8. print("{0:,}".format(123456789))
  9. print("{0:,}".format(123456789.312313))
  10. print("{0:.2f}".format(123456789.312313))
  11. print("{0:.5}".format(s))
  12. #整数类型
  13. a = 425
  14. print(
  15.     "2进制:{0:b},8进制:{0:o},10进制:{0:d},16进制:{0:X},".format(a)
  16. )
  17. #科学计数法
  18. pi = 3.1415926
  19. print("{0:.2f},{0:.2E},{0:.2e},{0:.2%}".format(pi))
复制代码
字符串的编码和解码

  1. s = "伟大的人民"
  2. #编码 str -> bytes
  3. #默认UTF-8
  4. scode = s.encode(errors="replace")
  5. print(scode)
  6. '''
  7.     def encode(self,
  8.            encoding: str = ...,
  9.            errors: str = ...) -> bytes
  10. '''
  11. scode_gbk= s.encode("gbk",errors="replace") #gbk中中文占两个字节
  12. print(scode_gbk)
  13. #编码中的出错问题
  14. s2 = "✌ye耶"
  15. #errors = strickt(default) or replace or ignore or xmlcharrefreplace
  16. scode_error = s2.encode("gbk",errors='replace')
  17. print(scode_error)
  18. # 解码过程 bytes -》 str
  19. print(bytes.decode(scode_gbk, "gbk"))
  20. print(bytes.decode(scode, "utf-8"))
  21. print(s2)
复制代码
数据的验证
  1. #阿拉伯数据判定
  2. print("12345".isdigit())#True
  3. print("一二三".isdigit())#False
  4. print("0x123".isdigit())#False
  5. print("Ⅰ".isdigit())#False
  6. print("一1".isdigit())#False
  7. print("="*20)
  8. #所有字符都是数字
  9. '''      
  10.     def isnumeric(self) -> bool
  11.         Return True if the string is a numeric string, False otherwise.
  12.         A string is numeric if all characters in the string are numeric and there is at
  13.         least one character in the string.
  14. '''
  15. print("123".isnumeric())#True
  16. print("一二三".isnumeric())#True
  17. print("0b100".isnumeric())#Fakse
  18. print("ⅠⅡⅢ".isnumeric())#True
  19. print("壹贰叁".isnumeric())#True
  20. print("="*20)
  21. #所有字母都是字母(包含中文字符)
  22. '''
  23.     def isalpha(self) -> bool
  24.         Return True if the string is an alphabetic string, False otherwise.
  25. '''
  26. print("hello你好".isalpha())#True
  27. print("hello你好123".isalpha())#False
  28. print("hello你好一二三".isalpha())#True
  29. print("hello你好0b100".isalpha())#False
  30. print("hello你好ⅠⅡⅢ".isalpha())#False
  31. print("hello你好壹贰叁".isalpha())#True\
  32. print("="*20)
  33. #判断字符的大小写 判断是读取全部字母
  34. print("hello你好".islower())
  35. print("hellO你好".islower())
  36. print("Hello你好".islower())
  37. print("hello=".islower())
  38. print("Hello=".isupper())
  39. print("="*20)
  40. # isspace
  41. print(" ".isspace())
  42. print("hello  ".isspace())
  43. print("   hello  ".isspace())
复制代码
字符串拼接
  1. s1 = "hello"
  2. s2 = "world"
  3. #(1)
  4. print(s1 + s2)
  5. #join()
  6. print("-".join([s1,s2]))
  7. #直接拼接
  8. print("hello""world")
  9. #format
  10. print("%s%s" % (s1,s2))
  11. print(f"{s1}{s2}")
  12. print("{0}{1}".format(s1,s2))
复制代码
去重
  1. s = "hello world"
  2. new_s = ""
  3. for item in s:
  4.     if item not in new_s:
  5.         new_s += item
  6. print(new_s)
  7. #使用索引
  8. new_s2 = ""
  9. for i in range(len(s)):
  10.     if s[i] not in new_s2:
  11.         new_s2 += s[i]
  12. print(new_s2)
  13. print(new_s2 == new_s)
  14. print(id(new_s2))
  15. print(id(new_s))
  16. #通过集合
  17. new_s3 = set(s)
  18. print(new_s3)
  19. lst = list(new_s3)
  20. print(lst)
  21. lst.sort(key=s.index)
  22. print(lst)
  23. print("".join(lst))
复制代码
正则表达式

  1. import re #导入
  2. pattern = '\d\.\d+' #限定符+ \d 0-9数字出现一次或多次
  3. s = "I study Python3 every day"
  4. match = re.match(pattern, s, re.I)
  5. print(match) #None
  6. s2 = "3.11Python I study every day"
  7. match1 = re.match(pattern, s2)
  8. print(match1)#<re.Match object; span=(0, 4), match='3.11'>
  9. print("匹配值的起始位置:",match1.start())
  10. print("匹配值的结束位置:",match1.end())
  11. print("匹配值的区间的位置:",match1.span())
  12. print("待匹配值的字符串:",match1.string)
  13. print("匹配的数据:",match1.group())
  14. '''
  15.     匹配值的起始位置: 0
  16.     匹配值的结束位置: 4
  17.     匹配值的区间的位置: (0, 4)
  18.     待匹配值的字符串: 3.11Python I study every day
  19.    匹配的数据: 3.11`
  20. '''
  21. #search
  22. pattern = "\d\.\d+"
  23. s = "I study python3.11 every day python2.7 i used"
  24. match = re.search(pattern, s)
  25. print(match)
  26. s1 = "2.71I study python3.11 every day python i used"
  27. match1 = re.search(pattern, s1)
  28. print(match1)
  29. #findall
  30. lst = re.findall(pattern,s)
  31. lst1 = re.findall(pattern,s1)
  32. print(lst)
  33. print(lst1)
  34. #sub and split
  35. import re
  36. #sub()
  37. pattern = "黑客|破解|反爬"
  38. s = "我需要学习python,想当黑客,破解一些VIP视频,python可以实现无底线反爬吗"
  39. '''
  40.     def sub(pattern, repl, string, count=0, flags=0):
  41.     """Return the string obtained by replacing the leftmost
  42.     non-overlapping occurrences of the pattern in string by the
  43.     replacement repl.  repl can be either a string or a callable;
  44.     if a string, backslash escapes in it are processed.  If it is
  45.     a callable, it's passed the Match object and must return
  46.     a replacement string to be used."""
  47.     return _compile(pattern, flags).sub(repl, string, count)
  48. '''
  49. new_s = re.sub(pattern, "XXX", s)
  50. print(new_s)
  51. #split
  52. s1 = "https://cn.bing.com/search?q=zhl&cvid=016dc0451cab427eaa8d8f04787fae17"
  53. pattern1 = "[?|&]"
  54. lst = re.split(pattern1,s1)
  55. print(lst)
复制代码
练习

Exer1
  1. '''
  2. 判断车牌归属地
  3.     使用列表存储N个车牌号码,通过遍历列表以及字符串的切片操作判断车牌的归属地
  4. '''
  5. lst = ["湘A0001","京A0001","沪A0001","粤A0001"]
  6. for item in lst:
  7.     area = item[0:1]
  8.     print(item, "归属地为:",area)
复制代码
Exer2
  1. '''
  2. 统计字符串中出现指定字符的次数
  3.     内容为 ”HelloPython,HelloJava,HelloC++“
  4.     用户从键盘录入要查询的字符,不区分大小写
  5.     要求统计出要查找的字符串出现的次数
  6. '''
  7. s1 = "HelloPython,HelloJava,HelloC++"
  8. word = input("输入要统计的字符:")
  9. print(f"{word}在{s1}一共出现了{s1.upper().count(word.upper())}")
复制代码
Exer3
  1. '''
  2.     格式化输出商品的名称和价格
  3.         使用列表存储一些商品数据,使用循环遍历输出商品的信息,要求对商品的编号进行格式化为6位
  4.         单价保存2位小鼠,并在前面添加人名币符号输出
  5. '''
  6. lst = [
  7.     ["01","PC","MS",5000],
  8.     ["02","car","BYD",50000],
  9.     ["03","mp","NS",5],
  10.     ["04","TV","TCL",500],
  11. ]
  12. print("编号\t\t\t名称\t\t\t品牌\t\t\t单价")
  13. for item in lst:
  14.     for i in item:
  15.         print(i,end="\t\t\t")
  16.     print()
  17. #格式化操作
  18. for item in lst:
  19.     item[0] = "0000" + item[0]
  20.     item[3] = "¥{0:.2f}".format(item[3])
  21. print("编号\t\t\t\t名称\t\t\t\t品牌\t\t\t\t单价")
  22. for item in lst:
  23.     for i in item:
  24.         print(i,end="\t\t\t")
  25.     print()
复制代码
Exer4
  1. '''
  2.     提取文本中所有图片的链接地址
  3. '''
  4. import random
  5. import string
  6. # 定义基础URL
  7. base_url = "https://example.com/image"
  8. # 定义可能的查询参数
  9. params = {
  10.     "resolution": ["1080p", "720p", "4k"],
  11.     "format": ["jpg", "png", "gif"],
  12.     "quality": ["high", "medium", "low"],
  13.     "random": lambda: ''.join(random.choices(string.ascii_letters + string.digits, k=6))
  14. }
  15. # 生成随机查询参数
  16. def generate_query_params():
  17.     query_params = []
  18.     for key, values in params.items():
  19.         if callable(values):
  20.             value = values()
  21.         else:
  22.             value = random.choice(values)
  23.         query_params.append(f"{key}={value}")
  24.     return "&".join(query_params)
  25. # 生成完整的图片URL
  26. def generate_complex_image_url():
  27.     query_string = generate_query_params()
  28.     return f"{base_url}?{query_string}"
  29. # 生成并打印10个复杂的图片URL
  30. for _ in range(10):
  31.     print(generate_complex_image_url())
  32. import re
  33. # 编译正则表达式模式
  34. pattern = re.compile(r"\d+")
  35. # 使用编译后的正则表达式对象进行匹配
  36. text = "There are 123 apples and 456 oranges."
  37. match = pattern.search(text)
  38. if match:
  39.     print("Found:", match.group())
  40. test_s = '"https://example.com/image?resolution=1080p&format=jpg&quality=high&random=abcdef","https://example.com/image?resolution=4k&format=jpg&quality=medium&random=saxkir","asd",sad,"asd",d"""""https://example.com/image?resolution=4k&format=jpg&quality=medium&random=driv3X",https://example.com/image?resolution=1080p&format=png&quality=low&random=xG7jqi'
  41. # 使用捕获组
  42. regex_pattern_with_groups = r'(https://example\.com/image\?resolution=(1080p|720p|4k)&format=(jpg|png|gif)&quality=(high|medium|low)&random=([a-zA-Z0-9]{6}))'
  43. # 不使用捕获组
  44. regex_pattern_without_groups = r'https://example\.com/image\?resolution=[0-9a-z]+&format=[0-9a-z]+&quality=[0-9a-z]+&random=[0-9a-zA-Z]{6}'
  45. # 使用findall查找所有匹配的URL
  46. lst_with_groups = re.findall(regex_pattern_with_groups, test_s)
  47. lst_without_groups = re.findall(regex_pattern_without_groups, test_s)
  48. # 打印所有匹配的URL
  49. print("With groups:")
  50. for item in lst_with_groups:
  51.     print(item)  # item是一个元组
  52. print("\nWithout groups:")
  53. for item in lst_without_groups:
  54.     print(item)  # item是整个匹配的字符串
复制代码
来源:https://www.cnblogs.com/OnedayOrSomeday/p/18488203
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具