我正在解析一些日志文件,需要为“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"
实现这一目标的最佳方法是什么?
您可以使用以下模式的re.search
:
p = re.compile(r"^[^:]*:(\d+)")
查看regex demo with String 1和另一个demo with String 2。
细节
^
- 字符串的开头[^:]*
- 除了:
之外的0+个字符:
- -
(\d+)
- 捕获组1:一个或多个数字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