perl 和 python 正则表达式/匹配和捕获最小长度的差异
Differences in perl and python regex / matching and caputuring minimum length
我希望这个 python 脚本:
import re
path='assign-e398846de42d98b1f79109926d0da510.json'
print(path)
m = re.compile('[a-z0-9]{8,}')
print(m.match(path))
print(re.match('[\w\d]{8,}', path))
与此 perl 行为类似(即:在相同位置匹配):
use strict;
$\ = "\n"; $, = "\t";
my $path='assign-e398846de42d98b1f79109926d0da510.json';
print($path);
print $path =~ /([\w\d]{8,})/;
但是 python 脚本的输出是:
assign-e398846de42d98b1f79109926d0da510.json
None
None
和 perl returns:
assign-e398846de42d98b1f79109926d0da510.json
e398846de42d98b1f79109926d0da510
这是为什么?如何在 python?
中捕获路径名中的 32 字符 md5 哈希
为 md5
-
尝试这个正则表达式
re.findall(r"([a-fA-F\d]{32})", data)
#output
['e398846de42d98b1f79109926d0da510']
此外,您需要使用 re.search
而不是 re.match
re.search('[\w\d]{8,}', path).group(0)
#output
'e398846de42d98b1f79109926d0da510'
使用 m.search
而不是 m.match
。后者只匹配字符串的开头。
我希望这个 python 脚本:
import re
path='assign-e398846de42d98b1f79109926d0da510.json'
print(path)
m = re.compile('[a-z0-9]{8,}')
print(m.match(path))
print(re.match('[\w\d]{8,}', path))
与此 perl 行为类似(即:在相同位置匹配):
use strict;
$\ = "\n"; $, = "\t";
my $path='assign-e398846de42d98b1f79109926d0da510.json';
print($path);
print $path =~ /([\w\d]{8,})/;
但是 python 脚本的输出是:
assign-e398846de42d98b1f79109926d0da510.json
None
None
和 perl returns:
assign-e398846de42d98b1f79109926d0da510.json
e398846de42d98b1f79109926d0da510
这是为什么?如何在 python?
中捕获路径名中的 32 字符 md5 哈希为 md5
-
re.findall(r"([a-fA-F\d]{32})", data)
#output
['e398846de42d98b1f79109926d0da510']
此外,您需要使用 re.search
而不是 re.match
re.search('[\w\d]{8,}', path).group(0)
#output
'e398846de42d98b1f79109926d0da510'
使用 m.search
而不是 m.match
。后者只匹配字符串的开头。