账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    python正则如何取出两个数值?
    80
    0

    问题: 取出日志中的 status 和 request_time的值:

    此日志用脚本无法匹配出来:

    {"@timestamp":"2018-03-30T19:24:26+08:00","server_addr":"172.31.0.24","remote_addr":"10.59.23.86","scheme":"https","host":"api.mycomapp.com","method":"GET","uri":"/app/global/2/android.json?mark=gif&version=96&app=&language=en","url":"/app/global/2/android.json","protocol":"HTTP/1.1","status":"200","size":10206,"request_time":"0.159","upstream_time":"0.159","upstream_addr":"192.31.2.78:80","referer":"-","agent":"Mozilla/5.0 (Linux; Android 6.0.1; SM-G900M Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.111 Mobile Safari/537.36 News/96 Android/96 AppFootball/96 SDK/23 PackageName/com.mycom.news","http_x_forwarded_for":"-","uuid":"@hu87x0VcRPqJ9SwLZtQVpJWArHrnN7xA/j0cHVxLDY/ZUVIxXhZn","authorization":"-","lang":"en-US","route_id":"4c64bfcc996f11381e19d85b2e8ce9f3","product":"mycom","subsys":"api","uuidx":"-","version_name":"2.6.2","package":"com.mycom.news","auid":"-"}

    python代码如下:

    #!/usr/bin/env python
    import re
    import sys
    
    regex = re.compile(r'{".*"status":(\d+).*request_time":(\d+\.\d+)')
    
    def process_line(line):
        ro = regex.match(line)
        if ro :
            status , reqtime= ro.groups()
            return status,reqtime
    
    if __name__ == '__main__':
        for line in sys.stdin:
            print process_line(line)
    

    如下方式执行:

    # cat t.log |python logclean.py 
    None

    可以匹配出来的日志:

    {"@timestamp":"2018-03-30T18:31:27+08:00","server_addr":"192.31.3.181","remote_addr":"197.210.173.163","scheme":"http","host":"api.abccccdapp.com","method":"GET","uri":"/app/archives/info?id=614464&language=en","url":"/index.php","protocol":"HTTP/1.0","status":200,"size":390,"request_time":0.006,"upstream_time":"0.006","upstream_host":"127.0.0.1:9000","referer":"abccccd://v1/main/home/tablist/http://app.abccccdapp.com/navite?push","agent":"Mozilla/5.0 (Linux; Android 7.1.1; SM-C7108 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/59.0.3071.125 Mobile Safari/537.36 News/100 Android/100 App/100 SDK/25 PackageName/com.abccccd.news","xff":"197.21.173.163","uuid":"@nBFS5qbkHR3H0rJ2tFlR4cJsz","authorization":"-","lang":"en-US","route_id":"8c2352d0045f02c79722cb03261c0f88","sign":"MGD8xl2Ue6lagzzorNUnsCFNpsb7QcOVWf1QI="}
    # cat 2.txt|python logclean.py 
    ('200', '0.006')

    正则没有匹配到,返回None,请问各位大神正则应该怎么写?谢谢

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 失心瘋╰つ 普通会员 1楼

      在Python中,你可以使用re模块的search函数和match函数来取出两个数值。以下是一个简单的例子:

      ```python import re

      假设你有一个字符串,其中包含两个数值

      s = "The price of the product is $20 and the price of the product is $15"

      使用正则表达式匹配数字

      match1 = re.search(r'\d+', s) match2 = re.search(r'\d+', s)

      如果匹配成功,那么 match1 和 match2 就是两个匹配的数字

      if match1: num1 = match1.group(0) num2 = match2.group(0) print("Number 1:", num1) print("Number 2:", num2) else: print("No match found")

      if match2: num1 = match2.group(0) num2 = match2.group(0) print("Number 1:", num1) print("Number 2:", num2) else: print("No match found") ```

      在这个例子中,我们首先使用re.search函数在字符串中查找两个匹配的数字。如果找到匹配的数字,我们就可以使用group函数获取这些数字。如果没有找到匹配的数字,group函数会返回None

      注意,这个例子假设你的字符串只包含两个数字。如果你的字符串中包含其他字符,你可能需要使用不同的正则表达式来匹配数字。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部