• 正则表达式


    收藏链接

    import re
    
    s1 = "python123"
    s2 = "python12
    "
    r2 = re.findall('[a-z1-9]',s1)
    r1 = re.findall(u'.',s1)   ##  . 匹配所有的字符
    print(r2)
    
    pattern = re.match("y.h",s1)
    
    ## 提取结构化文本
    ```python
    import re
    import pandas as pd
    regex = r"(.*)[考|进].*了(.*)"
    test_str = ("张华考上了北京大学
    "
    	"李萍进了中等技术学校
    "
    	"韩梅梅进了百货公司")
    mylist = []
    print(test_str)
    for line in test_str.split('
    '):
      mysearch = re.search(regex, line)
      if mysearch:
        name = mysearch.group(1)
        dest = mysearch.group(2)
        mylist.append((name, dest))
    
    df = pd.DataFrame(mylist)
    df.columns = ['姓名', '去向']
    df.to_excel("dest.xlsx", index=False)
    
    

    判断如果一个句子中英文或数字个数如果大于两个就判定为坏句子

    def good_line(line):
    if len(re.findall('[a-zA-Z0-9]',''.join(line)))>2:
    return False

    return True
    

    print(pattern)

    
    # 常用正则表达式
    
    ## ab+c,可以匹配 abc、abbc、abbbbc 等,+ 号代表前面的字符必须至少出现一次
    # (1次或多次)
    
    
    ```python
    str1 = "1abbbbc2432"
    
    str2 = "ab+c"
    result = re.match(str2,str1)
    
    result.group()
    

    a*b,可以匹配 b、ab、aaaaaaab 等,星 号代表字符可以不出现,也可以出现一次或者多次

    (0次、或1次、或多次)。

    colou?r 可以匹配 color 或者 colour, 问号代表前面的字符最多只可以出现一次

    (0次、或1次)。

    • compile() 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换
    import re
    
    src="3.12,3.45,66.4,56234,2355.523525,235,dgads"
    
    pattern=re.compile('d+.d+')
    result=pattern.findall(src)
    
    print(result)
    
    ['3.12', '3.45', '66.4', '2355.523525']
    

    match()函数必须在起始位置进行匹配

    import re
    print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
    print(re.match('com', 'www.runoob.com'))   
    
    (0, 3)
    None
    

    当要获得整个匹配成功的字串时, 使用group或group(0)

    import re
    
    pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I)   # re.I 表示忽略大小写
    m = pattern.match('Hello World Wide Web')
    
    m.group(0)    
    
    import re
    
    m = re.search('run[a-z]+b', 'www.runoob.com')
    if m:
        print(m.group())
        print(m.span())
    
    'Hello World'
    

    上面的 match 和 search 方法都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,获得所有匹配的结果。

    findall()默认返回的是一个list

    import re
    # pattern = re.compile('d+')   # 查找数字
    result1 = re.findall('d+','hello 123456 789')
    # result2 = pattern.findall('one1two2three3four4', 0, 10)
    print(result1[1])
    
    
    789
    

    正则表达式除了提取信息,我们有时候还需要借助于它来修改文本,比如我们想要把一串文本中的所有数字都去掉,可以使用sub()方法

    import re
    
    content = '54aK54yr5oiR54ix5L2g'
    content = re.sub('d+', 'lala', content)## 第一个参数为要匹配的字符,第二个参数为要替换成的字符
    print(content)
    
    lalaaKlalayrlalaoiRlalaixlalaLlalag
    

    正则表达式的复用

    import re
    
    content1 = '2016-12-15 12:00'
    content2 = '2016-12-17 12:55'
    content3 = '2016-12-22 13:21'
    pattern = re.compile('d{2}:d{2}')
    result1 = pattern.sub( '', content1)
    result2 = re.sub(pattern, '', content2)
    result3 = re.sub(pattern, '', content3)
    print(result1, result2, result3)
    
    2016-12-15  2016-12-17  2016-12-22 
    

    模式描述
    w匹配字母数字及下划线
    W匹配非字母数字及下划线
    s匹配任意空白字符,等价于 [ f].
    S匹配任意非空字符
    d匹配任意数字,等价于 [0-9]
    D匹配任意非数字
    A匹配字符串开始
    匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
    z匹配字符串结束
    G匹配最后匹配完成的位置
    匹配一个换行符
    匹配一个制表符
    ^匹配字符串的开头
    $匹配字符串的末尾。
    .匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
    [...]用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'
    [...]不在[]中的字符:[abc] 匹配除了a,b,c之外的字符。
    *匹配0个或多个的表达式。
    +匹配1个或多个的表达式。
    ?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
    {n}精确匹配n个前面表达式。
    {n, m}匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
    a|b匹配a或b
    ( )匹配括号内的表达式,也表示一个组

    原生字符串 是由r开头的字符串,其不包含转义符 就是 不起作用
    string 字符串中将理解为转义符
    r = 12

    r = 'niz dcndi'

    print(r)

    b = u'nidd /t didc'

    print(b)

    贪婪匹配 最小匹配

    import re 
    match = re.search(r'PY.*N','PYANBNCNDN')
    match.group(0)   ##默认贪婪匹配
    
    import re 
    match = re.search(r'PY.*?N','PYANBNCNDN')
    match.group(0)   ##添加问号获得最小匹配
    
    import re 
    match = re.search(r'"python','"pythonhaha"')
    match.group(0)
    
  • 相关阅读:
    C#和SqlServer中处理时间格式问题
    ReadOnly之后获取文本框的值
    asp.net给Reaper和GridView添加序号
    SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别
    asp.net获取服务器信息
    Repeater嵌套
    开博说明 拓荒者
    Git的深入理解与GitHub托管服务的使用
    Hadoop学习笔记一:单节点安装
    VirtualBox克隆后无法找到网卡的问题
  • 原文地址:https://www.cnblogs.com/rise0111/p/11563754.html
Copyright © 2020-2023  润新知