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