【问题标题】:Regular expression to get string获取字符串的正则表达式
【发布时间】:2013-04-24 11:07:19
【问题描述】:

我正在创建一个解析日志文件的脚本...这是以下行的示例:

data = "09:55:04.125 mta         Messages       I Doc O:SERVER (NVS:SMTP/me@domain.com) R:NVS:FAXG3.I0.0101 mid:6393"
data2= "09:55:05.045 mta         Messages       I Doc O:SERVER (NVS:SMTP/me@domain.com) R:ADMIN (NVS:SMTP.0/me@domain.fr) mid:6397"

起初我已经匹配了斜线和两点之间的内容,但我注意到有些行像第一行一样,类型“FAXG3.I0.0101”后面没有斜线


这是我使用的正则表达式:

exp = result = re.findall(r'[\w\.]+(?=:*)',data) # type S & D

我想要的结果是第一行的 'SMTP','FAXG3.I0.0101' 和第二行的 'SMTP','SMTP.0'。 有人可以帮助纠正我的正则表达式吗?

【问题讨论】:

    标签: python regex python-2.x


    【解决方案1】:

    “NVS:”是否保证出现在您的比赛前面?如果是这样,您可以使用NVS:([\w\.]+)

    re.findall(r'NVS:([\w\.]+)',data)
    ['SMTP', 'FAXG3.I0.0101']
    
    re.findall(r'NVS:([\w\.]+)',data2)
    ['SMTP', 'SMTP.0']
    

    【讨论】:

      【解决方案2】:

      以下应该可以解决问题

      >>> for x in re.finditer('(NVS:([\w.]+?)(\s|/))', data2):
      ...     print x.groups()[1]
      ...
      SMTP
      SMTP.0
      >>> for x in re.finditer('(NVS:([\w.]+?)(\s|/))', data):
      ...     print x.groups()[1]
      ...
      SMTP
      FAXG3.I0.0101
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        • 2014-04-09
        • 2019-09-07
        • 1970-01-01
        相关资源
        最近更新 更多