在Python中实现preg_match_all

rof*_*fle 2 php python regex

我基本上希望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)

Joh*_*ooy 6

如果没有正则表达式,您可以更快地完成此操作

[(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)


int*_*jay 5

你要求的不能是字典,因为它有多个相同的键.但是,您可以将它放在这样的元组列表中:

>>> [(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)