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

How to get first integer between two specific characters with regex in Python?

我正在解析一些日志文件,需要为 "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'

但是,如果“:”和“\”的第一次出现之间没有数字,并且希望代码为 return None 或 0。现在代码将 return '123123123' 如果模式看起来像这样:

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

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

您可以按照以下模式使用 re.search

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

参见regex demo with String 1 and another 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