Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python疑难解答中的Regex前瞻_Python_Regex - Fatal编程技术网

Python疑难解答中的Regex前瞻

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地址的regex lookahead。
示例数据(开始时提取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)
^[^ ]+