Entry
Translating regsub.splitx() to re.split()
Mar 1st, 2009 16:50
osososo didididi, Nathan Wallace, unknown unknown, Hans Nowak, Snippet 22, Tim Peters
"""
Packages: text.regular_expressions
"""
"""
> I have been using
>
> regsub.splitx('AbbbC', r'\([a-z]\)\1*')
>
> to split something like 'AbbbC' into ['A', 'bbb', 'C'].
>
> How do I translate it into re.split()?
With great difficulty <wink>. Interesting problem!
> I tried
>
> re.split(r'([a-z])+', 'AbbbC') -> ['A', 'b', 'C']
> re.split(r'(([a-z])+)', 'AbbbC') -> ['A', 'bbb', 'b', 'C']
> re.split(r'([a-z])\1*', 'AbbbC') -> ['A', 'b', 'C']
Those are all functioning as documented. Could be the closest
straightforward way you can get is a working <wink> variant of the
first
two:
"""
import re
print re.split(r'([a-z]+)', 'AbbbC') # ['A', 'bbb', 'C']
"""
> re.split(r'(([a-z])\1*)', 'AbbbC') -> it hangs
Note that \1 is *inside* group #1: this is an illegal regexp. The
regexp
compiler should have caught that & complained instead of hanging. It's
not unique to split; the simpler
print re.match(r'((a)\1*)', 'aaa')
also hangs, and the simpler-still
print re.match(r'(a\1*)', 'aaa')
at least yields an internal runtime error:
pcre.error: ('Regex execution error', -2)
Rewriting as a legal regexp doesn't solve the original problem, though:
re.split(r'(([a-z])\2*)', 'AbbbC') -> ['A', 'bbb', 'b', 'C']
What you would *like* to do now is suppress the output from group #2,
by
making it a non-capturing group, e.g.:
r'((?:[a-z])\2*)'
But making it non-capturing also prevents a subsequent back-reference
from
getting at it, so that doesn't work either.
Three workarounds:
1) Post-process the results to weed out the group #2 output:
results = re.split(r"(([a-z])\2*)", string)
# remove every third result
bad_indices = range(2, len(results), 3)
bad_indices.reverse()
for i in bad_indices:
del results[i]
2) Get the source for RegexObject.split (from lib/re.py), and modify
it to
your liking (it's just a Python loop that calls search repeatedly and
appends partial results to a list as it goes along).
3) Use brute force to avoid backreferences:
# build (a+|b+|...|z+)
import string
pat = string.join(string.lowercase, "+|")
pat = "(" + pat + "+)"
print re.split(pat, 'AbbbC')
regularly y'rs - tim
"""
http://dl3.com/link/category/voice
http://dl3.com/link/category/chat
http://dl3.com/link/category/song
http://dl3.com/link
http://www.dl3.com/smiles
http://www.dl3.com/cards
http://games.dl3.com
http://www.chataluae.com
http://www.dl3.com/vb/index.php
http://www.dl3.com/vb
http://www.dl3.com/vb
http://www.dl3.com
http://www.stop10.com
http://topics.ll6.com
http://topics.ll6.com
http://www.stop10.com
http://www.ll6.com/java.shtml
http://dlel.ll6.com/c21.html
http://dlel.ll6.com/c20.html
http://dlel.ll6.com/c19.html
http://dlel.ll6.com/c18.html
http://dlel.ll6.com/c17.html
http://dlel.ll6.com/categories.xml
http://dlel.ll6.com/sitemap.xml
http://dlel.ll6.com/c10.html
http://dlel.ll6.com/c9.html
http://dlel.ll6.com/c8.html
http://dlel.ll6.com/c7.html
http://dlel.ll6.com/c6.html
http://dlel.ll6.com/c5.html
http://dlel.ll6.com/c4.html
http://dlel.ll6.com/c3.html
http://dlel.ll6.com/c2.html
http://dlel.ll6.com/c10.html
http://dlel.ll6.com/c16.html
http://dlel.ll6.com/c15.html
http://dlel.ll6.com/c14.html
http://dlel.ll6.com/c13.html
http://dlel.ll6.com/c12.html
http://dlel.ll6.com/c11.html
http://voice.ll6.com
http://www.ll6.com
http://vb.ll6.com/forumdisplay.php?f=50
http://vb.ll6.com/forumdisplay.php?f=41
http://vb.ll6.com/forumdisplay.php?f=35
http://vb.ll6.com/forumdisplay.php?f=34
http://vb.ll6.com/forumdisplay.php?f=33
http://vb.ll6.com/forumdisplay.php?f=32
http://vb.ll6.com/forumdisplay.php?f=31
http://vb.ll6.com/forumdisplay.php?f=30
http://vb.ll6.com/forumdisplay.php?f=29
http://vb.ll6.com/forumdisplay.php?f=28
http://vb.ll6.com/forumdisplay.php?f=27
http://vb.ll6.com/forumdisplay.php?f=26
http://vb.ll6.com/forumdisplay.php?f=25
http://vb.ll6.com/forumdisplay.php?f=24
http://vb.ll6.com/forumdisplay.php?f=23
http://vb.ll6.com/forumdisplay.php?f=22
http://vb.ll6.com/forumdisplay.php?f=21
http://vb.ll6.com/forumdisplay.php?f=20
http://vb.ll6.com/forumdisplay.php?f=19
http://vb.ll6.com/forumdisplay.php?f=18
http://vb.ll6.com/forumdisplay.php?f=17
http://vb.ll6.com/forumdisplay.php?f=5
http://vb.ll6.com/forumdisplay.php?f=6
http://vb.ll6.com/forumdisplay.php?f=10
http://vb.ll6.com/forumdisplay.php?f=4
http://vb.ll6.com/index.php
http://ll6.com
http://www.alshalah.com
http://www.alshalah.com/chat1420.html
http://www.alshalah.com/music22.html
http://www.alshalah.com/music21.html
http://www.alshalah.com/chat1355.html
http://www.alshalah.com/chat1507.html
http://www.alshalah.com/download7.html
http://www.alshalah.com/download7.html
http://www.alshalah.com/chat1337.html
http://www.alshalah.com/chat100.html
http://www.alshalah.com/music12.html
http://www.alshalah.com/music12.html
http://www.alshalah.com/download5.html
http://www.alshalah.com/music23.html
http://www.alshalah.com/chat1339.html
http://www.alshalah.com/chat103.html
http://www.alshalah.com/music15.html
http://www.alshalah.com/chat1528.html
http://www.alshalah.com/chat1359.html
http://www.alshalah.com/chat1519.html
http://www.alshalah.com/chat1422.html
http://www.alshalah.com/music4.html
http://www.alshalah.com/chat101.html
http://www.alshalah.com/chat106.html
http://www.alshalah.com/chat102.html
http://www.alshalah.com/chat1166.html
http://www.alshalah.com/vote.php
http://www.alshalah.com/visit.php
http://www.alshalah.com/chat2821.html
http://www.alshalah.com/chat2821.html
http://www.alshalah.com/chat2821.html
http://www.alshalah.com/chat2821.html
http://www.alshalah.com/chat2820.html
http://www.alshalah.com/chat2820.html
http://www.alshalah.com/chat2819.html
http://www.alshalah.com/chat2819.html
http://www.alshalah.com/chat2818.html
http://www.alshalah.com/chat2818.html
http://www.alshalah.com/chat2817.html
http://www.alshalah.com/chat2817.html
http://www.alshalah.com/chat2816.html
http://www.alshalah.com/chat2816.html
http://www.alshalah.com/chat2815.html
http://www.alshalah.com/chat2815.html
http://www.alshalah.com/chat2814.html
http://www.alshalah.com/chat2814.html
http://www.alshalah.com/chat2813.html
http://www.alshalah.com/chat2813.html
http://www.alshalah.com/chat2812.html
http://www.alshalah.com/chat2812.html
http://www.alshalah.com/chat2813.html
http://www.alshalah.com/chat2811.html
http://www.alshalah.com/chat2811.html
http://www.alshalah.com/chat2810.html
http://www.alshalah.com/chat2810.html
http://www.alshalah.com/chat2809.html
http://www.alshalah.com/chat2809.html
http://www.alshalah.com/chat2808.html
http://www.alshalah.com/chat2808.html
http://www.alshalah.com/chat2807.html
http://www.alshalah.com/chat2807.html
http://www.alshalah.com/chat2806.html
http://www.alshalah.com/chat2806.html
http://www.alshalah.com/chat2805.html
http://www.alshalah.com/chat2804.html
http://www.alshalah.com/chat2803.html
http://www.alshalah.com/chat2803.html
http://www.alshalah.com/chat2802.html
http://www.alshalah.com/voice
http://www.alshalah.com/vb
http://www.alshalah.com/
http://www.alshalah.com/download3.html
http://www.alshalah.com/music6.html
http://www.alshalah.com/music6.html
http://www.alshalah.com/music5.html
http://www.alshalah.com/music5.html
http://www.alshalah.com/music4.html
http://www.alshalah.com/music4.html
http://www.alshalah.com/music3.html
http://www.alshalah.com/music3.html
http://www.alshalah.com/music22.html
http://www.alshalah.com/music21.html
http://www.alshalah.com/music19.html
http://www.alshalah.com/music18.html
http://www.alshalah.com/vb/sex202
http://www.alshalah.com/vb/sex205
http://www.alshalah.com/vb/sitemap
http://www.alshalah.com/vb/sitemap/f-183.html
http://www.alshalah.com/chat101.html
http://www.alshalah.com/chat101.html
http://www.alshalah.com/vb/picturet38947.html
http://www.alshalah.com/vb/picturet25902.html
http://www.alshalah.com/chat2801.html
http://www.alshalah.com/chat2800.html
http://www.alshalah.com/chat2799.html
http://www.alshalah.com/download10.html
http://www.alshalah.com/chat259.html
http://www.alshalah.com/vb/picturet939.html
http://www.alshalah.com/vb/picturet7317.html
http://www.alshalah.com/chat102.html
http://www.alshalah.com/chat312.html
http://www.alshalah.com/vb/picturet706.html
http://www.alshalah.com/vb/picturet22974-2.html
http://www.alshalah.com/vb/picturet26805.html
http://www.alshalah.com/chat601.html
http://www.alshalah.com/vb/picturet29167.html
http://www.alshalah.com/vb/picturet21358.html
http://www.alshalah.com/vb/picturet42591.html
http://www.alshalah.com/vb/picturet10141.html
http://www.alshalah.com/chat960.html
http://www.alshalah.com/chat658.html
http://www.alshalah.com/chat102.html
http://www.alshalah.com/chat1166.html
http://www.alshalah.com/vb/picturet34614.html
http://www.alshalah.com/chat2470.html
http://www.alshalah.com/vb/picturet44915.html
http://www.alshalah.com/download5.html
http://www.alshalah.com/chat2408.html
http://www.alshalah.com/chat2408.html
http://www.alshalah.com/vb/picturet24559.html
http://www.alshalah.com/music11.html
http://www.alshalah.com/vb/picturet40695.html
http://www.alshalah.com/vb/picturet1067.html
http://www.stop10.com
http://www.alshalah.com/chat27.html
http://www.alshalah.com/vb/picturet10871.html
http://www.alshalah.com/vb/picturet46798.html
http://www.alshalah.com/vb/picturet4995.html
http://www.alshalah.com/vb/picturet4445.html
http://www.alshalah.com/vb/picturet17029.html
http://www.alshalah.com/chat2794.html
http://www.alshalah.com/vb/picturet42026.html
http://www.alshalah.com/vb/picturet28063.html
http://www.alshalah.com/vb/picturet27011.html
http://www.alshalah.com/vb/picturet3521.html
http://www.alshalah.com/vb/picturet25360.html
http://www.alshalah.com/chat2793.html
http://www.alshalah.com/chat886.html
http://www.alshalah.com/vb/picturet274.htmll
http://www.alshalah.com/vb/picturet274.html
http://www.alshalah.com/music16.html
http://www.alshalah.com/download7.html
http://www.alshalah.com/vb/picturet43943.html
http://www.alshalah.com/chat2666.html
http://www.alshalah.com/music28.html
http://www.alshalah.com/music28.html
http://www.alshalah.com/music15.html
http://www.alshalah.com/music28.html