捕获正则表达式的内容并有效地删除它们

Gre*_*ind 7 python regex

情况:

  • text:一个字符串
  • R:匹配部分字符串的正则表达式.这可能是昂贵的计算.

我想从文本中删除R-matches,并查看它们实际包含的内容.目前,我这样做:

import re
ab_re = re.compile("[ab]")
text="abcdedfe falijbijie bbbb laifsjelifjl"
ab_re.findall(text)
# ['a', 'b', 'a', 'b', 'b', 'b', 'b', 'b', 'a']
ab_re.sub('',text)
# 'cdedfe flijijie  lifsjelifjl'
Run Code Online (Sandbox Code Playgroud)

正如我所知,这会运行正则表达式两次.是否有一种技术可以通过,也许使用re.split?看起来像基于分裂的解决方案,我需要至少两次正则表达式.

Dee*_*tan 4

import re

r = re.compile("[ab]")
text = "abcdedfe falijbijie bbbb laifsjelifjl"

matches = []
replaced = []
pos = 0
for m in r.finditer(text):
    matches.append(m.group(0))
    replaced.append(text[pos:m.start()])
    pos = m.end()
replaced.append(text[pos:])

print matches
print ''.join(replaced)
Run Code Online (Sandbox Code Playgroud)

输出:

['a', 'b', 'a', 'b', 'b', 'b', 'b', 'b', 'a']
cdedfe flijijie  lifsjelifjl
Run Code Online (Sandbox Code Playgroud)