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
我做错了什么?获取组1group()
默认情况下打印所有匹配的字符,其中group(1)
引用组索引1捕获的字符
extension = re.match(r'.+(\.\w+)\.\w+',file_path).group(1)
获取组1group()
默认情况下打印所有匹配的字符,其中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实际上想要匹配第二个到最后一个扩展名。