HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythonMinor

Capturing the positions of "start" and "end" markers in a multi-line string

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
capturingthepositionsmultilinemarkersstartandendstring

Problem

Is there any better (and shorter) way to get index of a regex match in Python?

import re
sstring = """
this is dummy text
which starts with nothing
and ends with something
"""

starts = re.finditer('start[s]?', sstring)
ends = re.finditer('end[s]?', sstring)

for m in starts:
    print (m.start())

for m in ends:
    print (m.end())


For me, there is only one starts and endsmatch in the string.

Solution

If you are certain that there is exactly one match, then you don't need to iterate. You could write:

start, end = re.search('start.*ends?', sstring, re.DOTALL).span()


To note:

  • Take advantage of re.DOTALL so that the regex can span multiple lines.



  • Use match.span() and destructuring assignment to get both the start and end in one statement.



  • The [s]? after start is, from a mechanical viewpoint, useless. You might want to keep it just for symmetry.



The spacing in print (something) is kind of weird; print(something) would be more conventional.

Code Snippets

start, end = re.search('start.*ends?', sstring, re.DOTALL).span()

Context

StackExchange Code Review Q#136527, answer score: 2

Revisions (0)

No revisions yet.