Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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 - Fatal编程技术网

Python 将某个单词后面的所有内容存储在一行、一个列表中-Regex

Python 将某个单词后面的所有内容存储在一行、一个列表中-Regex,python,Python,所以我有一句台词 unicomp6.unicomp.net - - [01/Jul/1995:00:00:14 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786 我想把HTTP/1.0(这两个数字)之后的所有内容都存储到列表中,我该如何使用正则表达式呢?我已经阅读了它们的文档,但它们让我有点困惑。你不需要正则表达式,你可以使用内置的str方法。例如 s = 'unicomp6.unicomp.net - - [01/Jul/199

所以我有一句台词

unicomp6.unicomp.net - - [01/Jul/1995:00:00:14 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786

我想把HTTP/1.0(这两个数字)之后的所有内容都存储到列表中,我该如何使用正则表达式呢?我已经阅读了它们的文档,但它们让我有点困惑。

你不需要正则表达式,你可以使用内置的
str
方法。例如

s = 'unicomp6.unicomp.net - - [01/Jul/1995:00:00:14 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786'
data = s.partition('HTTP/1.0" ')
nums = data[2].split()
print(nums)
输出

['200', '786']
[200, 786]
您也可以使用
.split()
而不是
.partition()
,但我认为
.partition()
在这里更自然。请注意,
nums
中存储的数字是字符串,因此如果需要对它们进行算术运算,则需要添加转换步骤

下面是一个使用
.split()
而不是
.partition()
将数字字符串转换为整数的示例

data = s.split('HTTP/1.0"')
nums = [int(u) for u in data[1].split()]
print(nums)
输出

['200', '786']
[200, 786]

你不需要正则表达式,你可以使用内置的
str
方法

s = 'unicomp6.unicomp.net - - [01/Jul/1995:00:00:14 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786'
data = s.partition('HTTP/1.0" ')
nums = data[2].split()
print(nums)
输出

['200', '786']
[200, 786]
您也可以使用
.split()
而不是
.partition()
,但我认为
.partition()
在这里更自然。请注意,
nums
中存储的数字是字符串,因此如果需要对它们进行算术运算,则需要添加转换步骤

下面是一个使用
.split()
而不是
.partition()
将数字字符串转换为整数的示例

data = s.split('HTTP/1.0"')
nums = [int(u) for u in data[1].split()]
print(nums)
输出

['200', '786']
[200, 786]
您可以使用,来构造适合您需要的正则表达式

对于您的特定示例,以下RE将起作用:

HTTP\/1.0.(.*$)
说明:

在组中捕获
HTTP 1.0“

给出输出:

` 200 786`
您可以使用,来构造适合您需要的正则表达式

对于您的特定示例,以下RE将起作用:

HTTP\/1.0.(.*$)
说明:

在组中捕获
HTTP 1.0“

给出输出:

` 200 786`

是否必须使用正则表达式?如果不需要,可以执行以下操作:

>>> lines = ['unicomp6.unicomp.net - - [01/Jul/1995:00:00:14 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786']
>>> 
>>> numbers = [line.split()[-2:] for line in lines]
>>> numbers
[['200', '786']]
>>> 

这假设“最后两个以空格分隔的字符串”与您想要的字符串相等。

您必须使用正则表达式吗?如果不需要,您可以这样做:

>>> lines = ['unicomp6.unicomp.net - - [01/Jul/1995:00:00:14 -0400] "GET /images/NASA-logosmall.gif HTTP/1.0" 200 786']
>>> 
>>> numbers = [line.split()[-2:] for line in lines]
>>> numbers
[['200', '786']]
>>> 

这假设“最后两个空格分隔的字符串”与您想要的字符串相等。

只获取“最后两个空格分隔的字符串”怎么样"? 你想让它们成为
int
?如果你这样做只是为了了解regex,那么最好选择使用regex的答案。但是请注意,使用内置
str
方法的代码通常比基于正则表达式的解决方案要快得多。只获取“最后两个空格分隔的字符串”怎么样?你想让它们成为
int
?如果你这样做只是为了了解regex,那么最好选择使用regex的答案。但是请注意,使用内置
str
方法的代码通常比基于regex的解决方案要快得多。从OP中不清楚
HTTP/1.0之后总是有两个项目“
;希望尼克能为我们澄清这一点。OTOH,依我看,保持事情的灵活性比编写只处理两项的代码要好。另外,如果我们不需要那些早期的子字符串,那么将
.split()
的输入分割到每个空白处似乎有点浪费。从OP上看不清楚
HTTP/1.0之后是否总是正好有两个项目“
;希望尼克能为我们澄清这一点。OTOH,依我看,保持事情的灵活性比编写只处理两项的代码要好。另外,当我们不需要那些早期的子字符串时,将
.split()。