我正在尝试解析TSHARK捕获的结果
以下是我要过滤的行:
Internet Protocol, Src: 10.10.52.250 (10.10.52.250), Dst: 224.0.0.2 (224.0.0.2)
我正在尝试提取Src和Dst,
这是我的代码:
str(re.search("Src:\s[0-9\.]{7-15}", a, re.I|re.M).group())[5:]
str(re.search("Dst:\s[0-9\.]{7-15}", a, re.I|re.M).group())[5:]
当我运行它时,我一直没有匹配,但是当我在正则表达式中使用IP地址的确切长度时,它可以工作。即
str(re.search("Src:\s[0-9\.]{9}", a, re.I|re.M).group())[5:]
工作得很好。我该如何解决这个问题?
答案 0 :(得分:3)
查看Python regex howto,不应该是{7,15}
吗?
答案 1 :(得分:3)
for match in re.finditer(r"\((\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))\b\)", subject):
这应匹配任何IPV4 IP地址。实际IP被捕获到组1中。
虽然你的正则表达式可能有用,但它很危险,因为999.999.999.999 不是有效的,但它会匹配。
答案 2 :(得分:2)
不太好:
text = 'fasga@fas#2*^127.0.0.1tfgws5151'
pattern = r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
pattern_re = re.compile(pattern)
ip_address = pattern_re.findall(text)
答案 3 :(得分:0)
尝试使用{7,15}
:
str(re.search("Src:\s[0-9\.]{7,15}", a, re.I|re.M).group())[5:]
str(re.search("Dst:\s[0-9\.]{7,15}", a, re.I|re.M).group())[5:]
此外,您应首先检查某个群组是否存在(或在其周围放置try
/ except
):
groupFound = re.search("Src:\s*[\d\.]{7,15}", a, re.I | re.M)
if groupFound:
str(groupFound.group())[5:]
# or:
try:
str(re.search("Src:\s*[\d\.]{7,15}", a, re.I | re.M).group())[5:]
except AttributeError:
# handle it