我基本上希望preg_match_all()以Python方式使用PHP 的相同功能.
如果我有一个正则表达式模式和一个字符串,有没有办法搜索字符串并找回每个元音出现的字典,以及它在字符串中的位置?
例:
s = "supercalifragilisticexpialidocious"
Run Code Online (Sandbox Code Playgroud)
会回来:
{
'u' : 1,
'e' : 3,
'a' : 6,
'i' : 8,
'a' : 11,
'i' : 13,
'i' : 15
}
Run Code Online (Sandbox Code Playgroud)
如果没有正则表达式,您可以更快地完成此操作
[(x,i) for i,x in enumerate(s) if x in "aeiou"]
Run Code Online (Sandbox Code Playgroud)
以下是一些时间:
对s = "supercalifragilisticexpialidocious"
timeit [(m.group(0), m.start()) for m in re.finditer('[aeiou]',s)]
10000 loops, best of 3: 27.5 µs per loop
timeit [(x,i) for i,x in enumerate(s) if x in "aeiou"]
100000 loops, best of 3: 14.4 µs per loop
Run Code Online (Sandbox Code Playgroud)
对于 s = "supercalifragilisticexpialidocious"*100
timeit [(m.group(0), m.start()) for m in re.finditer('[aeiou]',s)]
100 loops, best of 3: 2.01 ms per loop
timeit [(x,i) for i,x in enumerate(s) if x in "aeiou"]
1000 loops, best of 3: 1.24 ms per loop
Run Code Online (Sandbox Code Playgroud)
你要求的不能是字典,因为它有多个相同的键.但是,您可以将它放在这样的元组列表中:
>>> [(m.group(0), m.start()) for m in re.finditer('[aeiou]',s)]
[('u', 1), ('e', 3), ('a', 6), ('i', 8), ('a', 11), ('i', 13), ('i', 15), ('i', 18), ('e', 20), ('i', 23), ('a', 24), ('i', 26), ('o', 28), ('i', 30), ('o', 31), ('u', 32)]
Run Code Online (Sandbox Code Playgroud)