解析可能引用字段的python方法

解析可能引用字段的python方法,python,parsing,Python,Parsing,为此,我通常会编写一个函数,每次从输入字符串中提取一个字段,然后循环直到输入字符串为空 但是,必须有一种更像蟒蛇的方式来做到这一点,即一次将所有东西分开 输入字符串中的字段用空格分隔,包含空格的字段用引号括起来。带引号的字段不包含引号 此格式的一个真实示例是web服务器的访问日志文件: 216.244.66.234 - - [01/Nov/2019:19:20:07 +0000] "GET /robots.txt HTTP/1.1" 200 67 "-" "Mozilla/5.0 (compat

为此,我通常会编写一个函数,每次从输入字符串中提取一个字段,然后循环直到输入字符串为空

但是,必须有一种更像蟒蛇的方式来做到这一点,即一次将所有东西分开

输入字符串中的字段用空格分隔,包含空格的字段用引号括起来。带引号的字段不包含引号

此格式的一个真实示例是web服务器的访问日志文件:

216.244.66.234 - - [01/Nov/2019:19:20:07 +0000] "GET /robots.txt HTTP/1.1" 200 67 "-" "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)"
编辑:

例如,access_log是一个错误的选择,因为它包含一个以括号分隔的字段,其中包含一个空格

但是,由于我的原始问题(shlex.split())有一个简单的解决方案,我将把这个问题修改为包括处理括号内的字段(同样没有内部分隔符)

我要找的是一个将字符串解析为字段的示例,而不是使用函数一次从字符串中取出一个标记。

IUUC,您可以使用:

输出

216.244.66.234
-
-
[01/Nov/2019:19:20:07
+0000]
GET /robots.txt HTTP/1.1
200
67
-
Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)
IUUC,您可以使用:

输出

216.244.66.234
-
-
[01/Nov/2019:19:20:07
+0000]
GET /robots.txt HTTP/1.1
200
67
-
Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)

预期的输出是什么?@DanielMesejo,输出格式无关紧要,但假设函数将字符串转换为字符串列表。对于您的示例,对应的列表是什么?+0000之前有一个空格,没有空格quoted@DanielMesejo例如,我想访问日志是一个错误的选择。但有趣的是,如果解析也必须处理匹配的括号,该怎么做呢?(同样,假设没有内部']'字符。)如果您指的是括号和注释,我认为shlex.split不能这样做,尽管您可以用注释替换括号预期的输出是什么?@DanielMesejo,输出格式不重要,假设函数将一个字符串转换为一个字符串列表,那么对于您的示例,对应的列表是什么?+0000之前有一个空格,没有空格quoted@DanielMesejo例如,我想访问日志是一个错误的选择。但有趣的是,如果解析也必须处理匹配的括号,该怎么做呢?(同样,假设没有内部']'字符。)如果您指的是括号和注释,我认为shlex.split无法做到这一点,虽然你可以用注释代替括号,但我想你不会得到比这个更具pythonic的:使用别人已经编写的函数。我想你不会得到比这个更具pythonic的:使用别人已经编写的函数。