python--正则表达式,元字符,反义符,转义符,位数问题

 正则表达式(regular expression):

为什么使用正则表达式:

                在软件开发过程中,经常会涉及到大量的关键字等各种字符串的操作,使用正则表达式能很大程度的简化开发的复杂度和开发的效率,所以python中正则表达式在字符串的查询匹配中,占据很重要的地位

 'compile', 'copyreg', 'enum', 'error', 'escape', 'findall', 'finditer', 'fullmatch', 'functools', 'match', 'purge', 'search', 'split', 'sub', 'subn', 'template'

python中的re

                该模块是pyhton用来支持正则表达式模块,所以我们如需写正则表达式,必须学习该模块

 正则表达式的使用:

元字符:

        ​​​​​​​        ​​​​​​​.        ​​​​​​​        ​​​​​​​                #匹配任意符号(\n也就是换行符不匹配)

        ​​​​​​​        \w                             #匹配有效符号

        ​​​​​​​        \d                             #匹配数字

        ​​​​​​​        \s                             #匹配空白位(空格,\t, \n ,\r)

        ​​​​​​​        ^                              #以什么开头

        ​​​​​​​        $                              #以什么结尾

        ​​​​​​​        [ ]        ​​​​​​​        ​​​​​​​        ​​​​​​​     #列举中括号中的某一符号

        ​​​​​​​        [123456abc_]

        ​​​​​​​        [0123456789]

        ​​​​​​​        [0-9]

        ​​​​​​​        [a-z]

        ​​​​​​​        [0-9a-zA-Z]

 

>>> import re
>>>
>>> re.match("zhangbaoning", "zhangbaoning")
<re.Match object; span=(0, 12), match='zhangbaoning'>
>>> re.match("zhangbaoning", "zhangbaoning is good")
<re.Match object; span=(0, 12), match='zhangbaoning'>
>>> re.match(".", "zhangbaoning is good")
<re.Match object; span=(0, 1), match='z'>
>>> re.match(".", "Azhangbaoning is good")
<re.Match object; span=(0, 1), match='A'>
>>> re.match(".", "5Azhangbaoning is good")
<re.Match object; span=(0, 1), match='5'>
>>> re.match(".", "中国5Azhangbaoning is good")
<re.Match object; span=(0, 1), match='中'>
>>> re.match(".", "\r中国5Azhangbaoning is good")
<re.Match object; span=(0, 1), match='\r'>
>>> re.match(".", "\t\r中国5Azhangbaoning is good")
<re.Match object; span=(0, 1), match='\t'>
>>> re.match(".", "+\t\r中国5Azhangbaoning is good")
<re.Match object; span=(0, 1), match='+'>
>>>
>>>
>>>
>>> re.match("\w", "a")
<re.Match object; span=(0, 1), match='a'>
>>> re.match("\w", "A")

<re.Match object; span=(0, 1), match='A'>
>>> re.match("\w", "456")

<re.Match object; span=(0, 1), match='4'>
>>> re.match("\w", "_")

<re.Match object; span=(0, 1), match='_'>
>>> re.match("\w", "_456")

<re.Match object; span=(0, 1), match='_'>
>>> re.match("\w", "+_456")

>>> re.match("\w", "中+_456")

<re.Match object; span=(0, 1), match='中'>
>>>
>>>
>>>
>>> 中 = 10
>>> print(中)
10
>>> re.match("\d\d", "1assd24")

>>> #re.match("\d\d", "1assd24")   ==>match是从头匹配
>>> re.match("\d\d", "10assd24")

<re.Match object; span=(0, 2), match='10'>
>>> re.match("\s\s", "  ifyf")

<re.Match object; span=(0, 2), match='  '>
>>> re.match("\s\s", " \tifyf")

<re.Match object; span=(0, 2), match=' \t'>
>>> re.match("\s\s", " \n\tifyf")

<re.Match object; span=(0, 2), match=' \n'>
>>> re.match("\s\s", "\n\tifyf")

<re.Match object; span=(0, 2), match='\n\t'>
>>> re.match("\s\s", "\r\n\tifyf")

<re.Match object; span=(0, 2), match='\r\n'>
>>>
>>>
>>>
>>>
>>> re.match("^\d\d\w", "23a is")

<re.Match object; span=(0, 3), match='23a'>
>>> re.match("\d\d\w", "23a is")

<re.Match object; span=(0, 3), match='23a'>
>>>
>>> re.findall("\d+", "我今年16岁,是一个花季少女,我静静的等着18岁")
['16', '18']
>>> re.findall("^\d+", "我今年16岁,是一个花季少女,我静静的等着18岁")
[]
>>> re.findall("^\d+", "123456我今年16岁,是一个花季少女,我静静的等着18岁")
['123456']
>>> re.findall(".*", "123456我今年16岁,是一个花季少女,我静静的等着18岁")
['123456我今年16岁,是一个花季少女,我静静的等着18岁', '']
>>> re.findall(".*\d$", "123456我今年16岁,是一个花季少女,我静静的等着18岁")
[]
>>> re.findall(".*\d$", "123456我今年16岁,是一个花季少女,我静静的等着18")
['123456我今年16岁,是一个花季少女,我静静的等着18']
>>> re.findall("^\d.*\d$", "123456我今年16岁,是一个花季少女,我静静的等着18")

['123456我今年16岁,是一个花季少女,我静静的等着18']
>>> re.match("\d[abc].*","238sadfdgfrgrs")
>>> re.match("\d[abc].*","2sadfdgfrgrs")

>>> re.match("\d[abc].*","2caadfdgfrgrs")
<re.Match object; span=(0, 13), match='2caadfdgfrgrs'>

>>> re.match("[0123456789]", "5")
<re.Match object; span=(0, 1), match='5'>
>>> re.match("[a-z]", "d")
<re.Match object; span=(0, 1), match='d'>
>>> re.match("[0-9]", "8")
<re.Match object; span=(0, 1), match='8'>
>>> re.match("[0-9A-Za-z_]", "8")
<re.Match object; span=(0, 1), match='8'>
>>> re.match("[0-9A-Za-z_]", "_")
<re.Match object; span=(0, 1), match='_'>
>>> re.match("[0-9A-Za-z_]", "t")
<re.Match object; span=(0, 1), match='t'>
>>> re.match("[0-9A-Za-z_]", "W")
<re.Match object; span=(0, 1), match='W'>

反义符: 

                \w                        #特殊符号

                \D                        #非数字

                \S                        #非空白位

                [^]                        #非列举,和[ ]正好相反

>>> re.match("\D","A10086")
<re.Match object; span=(0, 1), match='A'>
>>> re.match("\D","a10086")
<re.Match object; span=(0, 1), match='a'>
>>> re.match("\w","a10086")
<re.Match object; span=(0, 1), match='a'>
>>> re.match("\s","a10086")
>>> re.match("\S","a10086")
<re.Match object; span=(0, 1), match='a'>

>>> re.findall("^\d.*", "ladohig")
[]
>>> re.findall("^\d.*", "1adohig")
['1adohig']
>>> re.findall("^[0-9].*", "1adohig")
['1adohig']
>>> re.findall("[^0-9].*", "1adohig")
['adohig']
>>> re.findall("[^abcd].*", "a1adohig")
['1adohig']

 

转义符: 

>>> print("\n123")

123
>>> print("\\n123")
\n123
>>> url = "d:\\a\\d\\c.txt"
>>> print(url)
d:\a\d\c.txt
>>>

>>> re.match("c:\\\\a\\\\d\\\\c.txt", url)
>>> re.match(r"c:\\a\\d\\c.txt", url)
>>> # re.match(r"c:\\a\\d\\c.txt", url) 加r,表示正则表达式

 

位数问题:

                        *                                #匹配任何位(0到多位)

                        +                               #匹配1到多位

                        ?                              #匹配0或者1位

                        {n}                             #确切的有n位

                        {m,n}                         #[m,n]区间内的任意值

                        {n,}                            # >= n

>>> #位数问题:
>>>
>>>
>>> re.findall("\d+", "我今年16岁,是一个花季少女,我静静的等着18岁")
['16', '18']
>>> re.findall("\d*", "我今年16岁,是一个花季少女,我静静的等着18岁")
['', '', '', '16', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '18', '', '']
>>> re.findall("\d*", "我今年16岁,是一个花季少女,我静静的等着18岁")
['', '', '', '16', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '18', '', '']
>>>
>>>
>>>
>>>
>>> re.findall(r"1[3456789]\d{9}", "18709319726")
['18709319726']
>>> re.findall(r"1[3456789]\d{9}", "18709319726564886165jkgukgi136986155464")
['18709319726', '13698615546']
>>>
>>> [a-zA-Z_0-9]{4,20}@openlab\.com
  File "<stdin>", line 1
    [a-zA-Z_0-9]{4,20}@openlab\.com
                               ^
SyntaxError: unexpected character after line continuation character
>>> re.match(r"[a-zA-Z_0-9]{4,20}@openlab\.com", "zhangbaoning@openlab.com")
<re.Match object; span=(0, 24), match='zhangbaoning@openlab.com'>
>>> re.match(r"[a-zA-Z_0-9]{4,20}@openlab.com", "zhangbaoning@openlabacom")
<re.Match object; span=(0, 24), match='zhangbaoning@openlabacom'>
>>>

 

上一篇:使用代理IP有风险吗?如何安全使用代理IP?


下一篇:探索下一代深度学习框架:OneFlow