Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.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)正则表达式问题_Python_Regex - Fatal编程技术网

开始(python)正则表达式问题

开始(python)正则表达式问题,python,regex,Python,Regex,我很难弄明白为什么下面的正则表达式似乎不起作用 我知道我可以用其他正则表达式来实现这个功能,但我认为这个应该可以 re.search ("(\d*)", "prefix 1234 suffix").groups() ('',) 有趣的是,findall似乎很有效: re.findall("(\d*)", "prefix 1234 suffix") ['', '', '', '', '', '', '', '1234', '', '', '', '', '', '', '', ''] 我理解为

我很难弄明白为什么下面的正则表达式似乎不起作用

我知道我可以用其他正则表达式来实现这个功能,但我认为这个应该可以

re.search ("(\d*)", "prefix 1234 suffix").groups()
('',)
有趣的是,findall似乎很有效:

re.findall("(\d*)", "prefix 1234 suffix")
['', '', '', '', '', '', '', '1234', '', '', '', '', '', '', '', '']
我理解为什么这样做有效,但我仍然不明白为什么搜索不起作用?我的理解是匹配应该强制它匹配整个字符串,但搜索应该在字符串中的任何位置找到数字

re.findall("(\d+)", "prefix 1234 suffix")
通过将
*
更改为
+
表示模式
\d
必须匹配1次或多次。您最初使用的
*
匹配了零次或多次,并且匹配了字符串中的每个字符。

请尝试以下操作:

re.findall("(\d+)", "prefix 1234 suffix")

通过将
*
更改为
+
表示模式
\d
必须匹配1次或多次。您最初使用的
*
匹配了零次或多次,这与字符串中的每个字符都匹配。

有效。第一个示例的返回值对应于
findall
返回值的第一个元素。只需使用:
r'(\d+)
作为正则表达式


search
在字符串中的任何位置都能找到数字,只有您的正则表达式告诉您零次或多次查找数字。因此,它在每个字符边界处都找到零位。

它可以工作。第一个示例的返回值对应于
findall
返回值的第一个元素。只需使用:
r'(\d+)
作为正则表达式


search
在字符串中的任何位置都能找到数字,只有您的正则表达式告诉您零次或多次查找数字。因此,它在每个字符边框处找到零位。

因为
.search
只运行一次搜索,并在第一个可以匹配的位置进行匹配。由于
\d*
完全不能匹配任何字符,因此它可以匹配的第一个位置是字符串的开头,不捕获任何字符——因此第一个捕获组是
'
。它完全按照你的要求去做


如果您使用正则表达式
(\d+)
,它必须至少匹配一个数字,那么它可以匹配的第一个位置将是
1
,它将捕获
1234
,,因为
.search
运行搜索一次,并在它可以匹配的第一个位置。由于
\d*
完全不能匹配任何字符,因此它可以匹配的第一个位置是字符串的开头,不捕获任何字符——因此第一个捕获组是
'
。它完全按照你的要求去做


如果您改为使用正则表达式
(\d+
),它必须至少匹配一个数字,那么它可以匹配的第一个位置将是
1
,它将捕获
1234
,使用
\d+
,而不是
\d*
\d*
表示零或更多,零是字符串中偏移量0处的值。

使用
\d+
,而不是
\d*
\d*
表示零或更多,零是字符串中偏移量0处的值。

我在问题中添加了一点,以澄清我的困惑。我知道findall会起作用——但我想知道为什么搜索不起作用。我在我的问题中添加了一点来澄清我的困惑。我知道findall会起作用,但我想知道为什么搜索不起作用。