Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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
regex101和python代码中作为组捕获的内容之间的差异_Python_Regex - Fatal编程技术网

regex101和python代码中作为组捕获的内容之间的差异

regex101和python代码中作为组捕获的内容之间的差异,python,regex,Python,Regex,我试图在最后一个文件扩展名之前捕获一个文件扩展名,例如: file.bin.txt.log=>应该返回给我:.txt 我的正则表达式值是:+(\。\w+\。\w+ 如果您将在中尝试,您将成功,但我的代码为我提供了整个文件路径=>file.bin.txt.log 文件路径源来自字典,并在调试器中显示如下: file_path = {unicode} u'file.bin.txt.log' 我获取相关信息的代码是: extension = re.match(r'.+(\.\w+)\.\w+',fi

我试图在最后一个文件扩展名之前捕获一个文件扩展名,例如:
file.bin.txt.log=>应该返回给我:
.txt

我的正则表达式值是:
+(\。\w+\。\w+

如果您将在中尝试,您将成功,但我的代码为我提供了整个文件路径=>file.bin.txt.log

文件路径源来自字典,并在调试器中显示如下:

file_path = {unicode} u'file.bin.txt.log'
我获取相关信息的代码是:

extension = re.match(r'.+(\.\w+)\.\w+',file_path).group()
print extension
我做错了什么?

获取组1
group()
默认情况下打印所有匹配的字符,其中
group(1)
引用组索引1捕获的字符

extension = re.match(r'.+(\.\w+)\.\w+',file_path).group(1)
获取组1
group()
默认情况下打印所有匹配的字符,其中
group(1)
引用组索引1捕获的字符

extension = re.match(r'.+(\.\w+)\.\w+',file_path).group(1)

这是因为
group()
返回整个匹配。相反,您需要
组(1)

还请注意,您不必使用正则表达式执行此类任务,您只需使用点分割文本即可获得预期部分:

>>> file_path.split('.')[-2]
u'txt'

这是因为
group()
返回整个匹配。相反,您需要
组(1)

还请注意,您不必使用正则表达式执行此类任务,您只需使用点分割文本即可获得预期部分:

>>> file_path.split('.')[-2]
u'txt'
返回单个组号
n
。按照惯例,第0个组始终是完全匹配的字符串,因此在您的示例中是完整的文件名

但您希望得到的是索引为1的捕获组,因此只需指定:

>>> re.match('.+(\.\w+)\.\w+', file_path).group(1)
'.txt'
返回单个组号
n
。按照惯例,第0个组始终是完全匹配的字符串,因此在您的示例中是完整的文件名

但您希望得到的是索引为1的捕获组,因此只需指定:

>>> re.match('.+(\.\w+)\.\w+', file_path).group(1)
'.txt'

请注意,OP实际上想要匹配第二个到最后一个扩展名。请注意,OP实际上想要匹配第二个到最后一个扩展名。