如何在Python中使用正则表达式获取两个特定字符之间的第一个整数?

问题描述 投票:1回答:1

我正在解析一些日志文件,需要为“size”参数提取整数。

字符串(它的一部分)看起来像这样

 "asdasdasd\\\size\\x22:22\x0A23232d:123123123\x0A2"  

我想得到“:”和“\”之间的第一个整数。那将是22.不是123123123。

我试过以下代码

 p = re.compile("[\:](\d+)[\D]")
 s = "asdasdasd\\size\\x22:22\x0A23232d:123123123\x0A2"
 p.findall(s)[0]

 output = '22'

但是,如果首次出现“:”和“\”之间没有数字,并希望代码返回None或0.如果模式如下所示,代码将返回'123123123':

"asdasdasd\\size\\x22:\x0A23232d:123123123\x0A2"

实现这一目标的最佳方法是什么?

python regex string split logfile
1个回答
2
投票

您可以使用以下模式的re.search

p = re.compile(r"^[^:]*:(\d+)")

查看regex demo with String 1和另一个demo with String 2

细节

  • ^ - 字符串的开头
  • [^:]* - 除了:之外的0+个字符
  • : - -
  • (\d+) - 捕获组1:一个或多个数字

Python demo

import re
strs = ["asdasdasd\\size\\x22:\x0A23232d:123123123\x0A2", "asdasdasd\\\size\\x22:22\x0A23232d:123123123\x0A2"]
p = re.compile(r"^[^:]*:(\d+)")
for s in strs:
    result = ""
    m = p.search(s)
    if m:
        result = m.group(1)
    else:
        result = None
    print(result)

输出:

None
22
© www.soinside.com 2019 - 2024. All rights reserved.