如何改进这个正则表达式以在其他情况下工作?

我可以拆分这个字符串:

199.72.81.55 - - [01/Jul/1995:00:00:01 -0400] "GET /history/apollo/ HTTP/1.0" 200 6245

使用这个正则表达式:

'([(\d\.)]+) - - \[(.*?)\] "(.*?)" (\d+) (\d+)'

那么如何改进这个 RegEx 来拆分这种字符串(那里有互联网地址而不是 IP):

unicomp6.unicomp.net - - [01/Jul/1995:00:00:06 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 3985

和这种字符串(双引号之间有双引号,我没有最后一个数字

frank.mtsu.edu - - [03/Jul/1995:02:41:15 -0400] "GET /images/" HTTP/1.0" 404 -

谢谢!


ABOUTYOU
浏览 229回答 2
2回答

慕慕森

对于这种情况|运算符的含义或有用,对于您的第二个示例,您可以将表达式修改为:'([(\d\.)]+|[a-z\d\.]+) - - \[(.*?)\] "(.*?)" (\d+) (\d+)'请注意,这假定所有地址仅由小写字母数字和点组成。编辑:@tripleee评论后我必须承认地址可能包含更多不同的字符,因此我添加了更宽容的解决方案:'([(\d\.)]+|[^ ]+) - - \[(.*?)\] "(.*?)" (\d+) (\d+)'这个假设地址可能包含任何不是空格的字符。如果这太宽容,请随时改进早期版本。如评论中所述,它是多余的,可能会替换为'([^ ]+) - - \[(.*?)\] "(.*?)" (\d+) (\d+)'要使其适用于最后一种情况,只需将 last 替换(\d+)为(\d+|-),正如@solarc前面所建议的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python