如何在Python中使用regex获得两个特定字符之间的第一个整数?

2024-06-26 14:14:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在分析一些日志文件,需要为“size”参数提取一个整数。你知道吗

绳子(部分)看起来像这样

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

我想得到“:”和“\”之间的第一个整数。那是22岁。不是123123。你知道吗

我尝试了以下代码

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

 output = '22'

但是,如果“:”和“\”的第一次出现之间没有数字,并且希望代码返回None或0。现在,如果模式如下所示,代码将返回“123123”:

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

实现这一目标的最佳方法是什么?你知道吗


Tags: 文件代码reoutput参数size数字整数
1条回答
网友
1楼 · 发布于 2024-06-26 14:14:05

可以将re.search与以下模式一起使用:

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

参见regex demo with String 1和另一个demo with String 2。你知道吗

细节

  • ^-字符串开头
  • [^:]*-0+字符,而不是:
  • :-a-
  • (\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

相关问题 更多 >