• python正则表达式笔记2


    由 '\' 和一个字符组成的特殊序列在以下列出。
    如果普通字符不是ASCII数位或者ASCII字母,那么正则样式将匹配第二个字符。比如,\$ 匹配字符 '$'.

    \number
    匹配数字代表的组合。每个括号是一个组合,组合从1开始编号。
    比如 (.+) \1 匹配 'the the' 或者 '55 55', 但不会匹配 'thethe' (注意组合后面的空格)。
    这个特殊序列只能用于匹配前面99个组合。
    如果 number 的第一个数位是0, 或者 number 是三个八进制数,它将不会被看作是一个组合,而是八进制的数字值。
    在 '[' 和 ']' 字符集合内,任何数字转义都被看作是字符。

    1. print('============================')
    2. # 保留中间空格,左右重复字符串,其他数据排除
    3. str_list1 = ['python python', 'python java', 'helloworld', '2023 2023', '20221212']
    4. get_list1 = []
    5. for ss in str_list1:
    6. # 查找匹配的字符, 注意组合后面的空格, \1 代表重复前面括号组合规则(.+)
    7. if re.search(r"(.+) \1", ss):
    8. print('保留')
    9. get_list1.append(ss)
    10. else:
    11. print('去除')
    12. continue
    13. print(get_list1)
    14. # ['python python', '2023 2023']
    15. print('============================')

    \A
    只匹配字符串开始。

    \Z
    只匹配字符串结尾。

    1. print('============================')
    2. # 保留数字或小数的金额格式数据,其他数据排除
    3. str_list2 = ['5005', '200.85', '¥12450', '¥100.50', '张三', '2023.08.09']
    4. get_list2 = []
    5. for ss in str_list2:
    6. # 查找匹配的字符,下面方法等价匹配
    7. if re.search(r'\A\d+\.?\d*\Z', ss):
    8. # if re.search(r'(\A\d+\.?\d*\Z)', ss):
    9. # if re.search(r'(^\d+\.?\d*$)', ss):
    10. # if re.search(r'^\d+\.?\d*$', ss):
    11. # if re.fullmatch(r'\d+\.?\d*', ss):
    12. print('保留')
    13. get_list2.append(ss)
    14. else:
    15. print('去除')
    16. continue
    17. print(get_list2)
    18. # ['5005', '200.85', '¥12450', '¥100.50']
    19. print('============================')

    \b
    匹配空字符串,但只在单词开始或结尾的位置。一个单词被定义为一个单词字符的序列。
    注意,通常 \b 定义为 \w 和 \W 字符之间,或者 \w 和字符串开始/结尾的边界,
    意思就是 r'\bfoo\b' 匹配 'foo', 'foo.', '(foo)', 'bar foo baz' 但不匹配 'foobar' 或者 'foo3'。

    默认情况下,Unicode字母和数字是在Unicode样式中使用的,但是可以用 ASCII 标记来更改。
    如果 LOCALE 标记被设置的话,词的边界是由当前语言区域设置决定的,\b 表示退格字符,以便与Python字符串文本兼容。

    1. print('============================')
    2. str_list3 = ['foo', 'foo.', '(foo)', 'bar foo baz', 'foobar', 'foo3']
    3. for ss in str_list3:
    4. # 查找匹配的字符
    5. print(re.search(r'\bfoo\b', ss))
    6. print('============================')
    7. '''
    8. None
    9. None
    10. '''

     

    \B
    匹配空字符串,但不能在词的开头或者结尾。
    意思就是 r'py\B' 匹配 'python', 'py3', 'py2', 但不匹配 'py', 'py.', 或者 'py!'.
    \B 是 \b 的取非,所以Unicode样式的词语是由Unicode字母,数字或下划线构成的,
    虽然可以用 ASCII 标志来改变。如果使用了 LOCALE 标志,则词的边界由当前语言区域设置。

    1. print('============================')
    2. str_list3 = ['python', 'py3', 'py2', 'py', 'py.', 'py!']
    3. for ss in str_list3:
    4. # 查找匹配的字符
    5. print(re.search(r'py\B', ss))
    6. print('============================')
    7. '''
    8. None
    9. None
    10. None
    11. '''

    \d
    1, 对于 Unicode (str) 样式:
    匹配任何Unicode十进制数(就是在Unicode字符目录[Nd]里的字符)。
    这包括了 [0-9] ,和很多其他的数字字符。如果设置了 ASCII 标志,就只匹配 [0-9] 。

    2, 对于8位(bytes)样式:
    匹配任何十进制数,就是 [0-9]。

    \D
    匹配任何非十进制数字的字符。
    就是 \d 取非。 如果设置了 ASCII 标志,就相当于 [^0-9] 。

    1. print('============================')
    2. string = '(python)-12345'
    3. # 提取全部数字字符
    4. nums_str = ''.join(re.findall(r'\d', string))
    5. print(nums_str)
    6. # 12345
    7. # 提取全部非数字字符
    8. char_str = ''.join(re.findall(r'\D', string))
    9. print(char_str)
    10. # (python)-
    11. print('============================')

    \s
    1, 对于 Unicode (str) 样式:
    匹配任何Unicode空白字符(包括 [ \t\n\r\f\v] ,还有很多其他字符,比如不同语言排版规则约定的不换行空格)。
    如果 ASCII 被设置,就只匹配 [ \t\n\r\f\v] 。

    2, 对于8位(bytes)样式:
    匹配ASCII中的空白字符,就是 [ \t\n\r\f\v] 。

    \S
    匹配任何非空白字符。
    就是 \s 取非。如果设置了 ASCII 标志,就相当于 [^ \t\n\r\f\v] 。

    \w
    1, 对于 Unicode (str) 样式:
    匹配 Unicode 单词类字符;这包括字母数字字符 (如 str.isalnum() 所定义的) 以及下划线 (_)。
    如果使用了 ASCII 旗标,则将只匹配 [a-zA-Z0-9_]。

    2, 对于8位(bytes)样式:
    匹配ASCII字符中的数字和字母和下划线,就是 [a-zA-Z0-9_] 。
    如果设置了 LOCALE 标记,就匹配当前语言区域的数字和字母和下划线。

    \W
    匹配非单词字符的字符。
    这与 \w 正相反。如果使用了 ASCII 旗标,这就等价于 [^a-zA-Z0-9_]。
    如果使用了 LOCALE 旗标,则会匹配当前区域中既非字母数字也非下划线的字符。
    '''

    r'''
    绝大部分Python的标准转义字符也被正则表达式分析器支持。:
    \a \b \f \n
    \N \r \t \u
    \U \v \x \\
    '''

    1. print('============================')
    2. string = '(python)-12345\t \n \r|张三'
    3. # 提取全部空白字符
    4. blank_str = re.findall(r'\s', string)
    5. print(blank_str)
    6. # ['\t', ' ', '\n', ' ', '\r']
    7. # 提取全部非空白字符
    8. no_blank_str = ''.join(re.findall(r'\S', string))
    9. print(no_blank_str)
    10. # (python)-12345|张三
    11. # 匹配 Unicode 单词类字符
    12. un_str = ''.join(re.findall(r'\w', string))
    13. print(un_str)
    14. # python12345张三
    15. # 匹配非单词字符的字符
    16. no_un_str = re.findall(r'\W', string)
    17. print(no_un_str)
    18. # ['(', ')', '-', '\t', ' ', '\n', ' ', '\r', '|']
    19. print('============================')

    正则表达式实战笔记

    1. print('=============正则表达式实战笔记===============')
    2. string1 = 'home/workspace/python/test.py'
    3. # 去除最后/后面文件名,只保留路径,以下几个方法等价匹配
    4. # print(re.sub(r'test.py', '', string1))
    5. # print(re.sub(r'([a-z]{4}.py$)', '', string1))
    6. print(re.sub(r'(\b[a-z]{4}.py\b)', '', string1))
    7. # 只保留文件名
    8. print(''.join(re.findall(r'(\b[a-z]{4}.py\b)',string1)))
    9. url_str = 'https://www.abcxyz.com/861091450/28240726.html'
    10. # 去除最后/后面数字+.html,保留前面的url地址
    11. print(re.sub(r'(\d+\.html\b)', '', url_str))
    12. string2 = "5,000.00伍仟元整"
    13. # 提取数字金额
    14. amount = re.findall(r'\d+\.?\d*', string2)
    15. amount = ''.join(amount)
    16. print("数字金额:", amount)
    17. # 提取中文
    18. ch_amount = re.findall(r'[\u4e00-\u9fa5]', string2)
    19. ch_amount = ''.join(ch_amount)
    20. print("中文金额:", ch_amount)
    21. # 下面列表元素有1-2个字错误,现在全部替换成统一数据
    22. str_list3 = ['铜鼓县', '刚鼓县', '钢鼓县', '同古县', '铜古县', '铜故县']
    23. for i in range(len(str_list3)):
    24. # 匹配替换的字符
    25. str_list3[i] = re.sub(r"(.鼓县)|(同古县)|(铜.县)", "铜鼓县", str_list3[i])
    26. print(str_list3)
    27. # ['铜鼓县', '铜鼓县', '铜鼓县', '铜鼓县', '铜鼓县', '铜鼓县']
    28. print('============================')
    29. work_date = '610012 星期二 : 2023-06-12 14:23:30 1.0212'
    30. # 只取日期数据 : 2023-06-12
    31. work_date = re.findall(r'\d{4}-\d{1,2}-\d{1,2}',work_date)[0]
    32. print(work_date)
    33. str_url = 'https://www.abcxyz.com/60abc12.html'
    34. # 提取url中间的代码数据 : 60abc12
    35. str_code = re.findall(r'https://www.abcxyz.com/(.*?).html', str_url)[0]
    36. print(str_code)

  • 相关阅读:
    Android retrofit使用模板
    【PostgreSQL的shared_buffers和系统OS cache的关系】
    Redis(10)Geospatial 地理位置
    Captura录屏工具安装和使用
    【ROS入门】创建工作空间与功能包
    深入解析ASP.NET Core MVC的模块化设计[下篇]
    Java给Excel设置单元格格式
    一边分拆、一边冲刺港股上市,美的集团加快资本运作步伐
    《C++ Primer》练习9.52:使用栈实现四则运算
    6.2 全排列Heap算法
  • 原文地址:https://blog.csdn.net/xionghui2007/article/details/132754653