如何在 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 组:一个或多个数字
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
我正在解析一些日志文件,需要为 "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 组:一个或多个数字
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