美文网首页
正则表达式匹配整数或小数实例

正则表达式匹配整数或小数实例

作者: Yvanna_15 | 来源:发表于2019-03-27 18:46 被阅读0次

    实例:在测试过程中需要分析log文件,筛选有用信息,
    已知字符串test_str中包含整数、小数、IP地址格式的数字及英文单词、特殊字符等,要求用正则表达式取出所有整数和小数。用python语言实现代码如下:

    #!/usr/bin/python
    import re
    test_str = '''type logfile
    [  8] local 81.33 port 12345 connected with 82.33.44.250 port 55611          
    '''
    ret1 = re.findall(r'([\d+\.]+)', test_str)  #会匹配到IP地址
    ret2 = re.findall(r'[^\.\d](\d+\.?\d+)[^\.\d]', test_str)    
    ret3 = re.findall(r'[^\.\d](\d+\.\d+|\d+)[^\.\d]', test_str)
    print(ret1)
    print(ret2)
    print(ret3)
    

    运行结果及分析


    运行结果
    • 只有ret3能精确匹配到所有整数和小数。

    • ret1匹配结果包括IP地址'82.33.44.250',因为[\d+.]+方括号外的加号表示匹配一次或多次方括号内的字符,小数点可能匹配多次,不符合要求,所以ret2用.?表示匹配小数点0次或1次;

    • ret2匹配结果缺少整数8,(\d+.?\d+)圆括号前后都有[^.\d]表示获取结果前后都不能有小数点或数字,但圆括号内\d+出现了两次就不能匹配个位数,匹配不全;

    代码里用到的正则表达式符号释义如下:

    (pattern) 匹配pattern并获取这一匹配。要匹配圆括号字符,请使用\(\)
    . 任何单个字符
    \ 转义
    \. 字符点
    \d 匹配一个数字字符,0至9之间的数字,等价于[0-9] 
    | 或
    ? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。等价于匹配长度{0,1}
    
    [^a-z] 匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。
    [^xyz] 匹配非xyz的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”任一字符。
    
    

    相关文章

      网友评论

          本文标题:正则表达式匹配整数或小数实例

          本文链接:https://www.haomeiwen.com/subject/tlhtbqtx.html