Newbie Class/Counter question
Michael Spencer
mahs at telcopartners.com
Tue Mar 14 23:51:12 EST 2006
ProvoWallis wrote:
>
> My document looks like this
>
> <level1>A. Title Text
> <level2>1. Title Text
> <level2>1. Title Text
> <level2>1. Title Text
> <level1>B. Title Text
> <level2>1. Title Text
> <level2>1. Title Text
>
> but I want to change the numbering of the second level to sequential
> numbers like 1, 2, 3, etc. so my output would look like this
>
> <level1>A. Title Text
> <level2>1. Title Text
> <level2>2. Title Text
> <level2>3. Title Text
> <level1>B. Title Text
> <level2>1. Title Text
> <level2>2. Title Text
>
...
Here's a fixed-up version of your approach:
import re
source_text = """
<level1>A. Title Text
<level2>1. Title Text
<level2>1. Title Text
<level2>1. Title Text
<level1>B. Title Text
<level2>1. Title Text
<level2>1. Title Text"""
class ReplacePtSubNumber(object):
line_pattern = re.compile("""
(\<\w+\>) # <level1>
(\w) # second level
(\.\s+\w+\s*\w+) # . Title Text
""", re.VERBOSE)
def __init__(self):
self._count = 0
def sub(self, match):
level, second, rest = match.groups()
if second.isalpha():
self._count = 0
else:
self._count +=1
second = str(self._count)
return "%s%s%s" % (level, second, rest)
def replace(self, source):
return self.line_pattern.sub(self.sub, source)
>>> r = ReplacePtSubNumber()
>>> print r.replace(source_text)
<level1>A. Title Text
<level2>1. Title Text
<level2>2. Title Text
<level2>3. Title Text
<level1>B. Title Text
<level2>1. Title Text
<level2>2. Title Text
HTH
Michael
More information about the Python-list
mailing list