Python疑难解答中的Regex前瞻
试图获取一个用于从数据集的每一行提取IP地址的regex lookahead。Python疑难解答中的Regex前瞻,python,regex,Python,Regex,试图获取一个用于从数据集的每一行提取IP地址的regex lookahead。 示例数据(开始时提取IP地址): My lookahead适用于有用户名的条目(如第一行中的rau5026),但对于没有用户名的条目,它包括第一个破折号(第二个条目,用户名为“-”。。。 因此,对于第一个条目,它返回“13.112.8.80”,但第二个条目返回“159.253.153.40——” 我使用的正则表达式是: ^.*(?=\s-\s) 您可以使用此正则表达式与IPv4 IP地址匹配。您的正则表达式过于宽松
示例数据(开始时提取IP地址): My lookahead适用于有用户名的条目(如第一行中的rau5026),但对于没有用户名的条目,它包括第一个破折号(第二个条目,用户名为“-”。。。 因此,对于第一个条目,它返回“13.112.8.80”,但第二个条目返回“159.253.153.40——” 我使用的正则表达式是:
^.*(?=\s-\s)
您可以使用此正则表达式与IPv4 IP地址匹配。您的正则表达式过于宽松
(?:[0-9]{1,3}\.){3}[0-9]{1,3}
这将与以下内容相匹配:
13.112.8.80
159.253.153.40
136.195.158.6
您所需要的只是:
^[^ ]+
它的意思是:
从不是空格字符的每行开始读取所有内容
它是一个日志文件,具有可预测和已知的格式,因此简单性更好。您不需要验证每行的开头是否为IP地址,因为它是有保证的
为什么在这里使用正则表达式而不是
split()
?例如:ip,rest=s.split(None,1)
^[^ ]+