[Answered ]-Parsing string – regex help in python

1👍

If your input is always going to formatted in exactly this way, using str.split() is preferable. If you want something slightly more resilient, here’s a regex approach, using re.VERBOSE and re.DOTALL:

import re

desc_match = re.search(r'''(?sx)
    (?P<loc>Location:.+?)[\n\r]
    (?P<time>Time:.+?)[\n\r]
    (?P<vends>Vendors:.+?)(?:\n\r?){2}''', desc)

if desc_match:
    for gname in ['loc', 'time', 'vends']:
        print desc_match.group(gname)

Given your definition of desc, this prints out:

Location: 5th St. @ Minna St.
Time: 11:00am-2:00pm

Vendors:
Kasa Indian
Fiveten Burger
Hiyaaa
The Rib Whip
Mayo & Mustard

Efficiency really doesn’t matter here because the time is going to be negligible either way (don’t optimize unless there is a bottleneck.) And again, this is only “nicer” if it works more often than your solution using str.split() – that is, if there are any possible input strings for which your solution does not produce the correct result.

If you only want the values, just move the prefixes outside of the group definitions (a group is defined by (?P<group_name>...))

r'''(?sx)
    Location: \s* (?P<loc>.+?)   [n\r]
    Time:     \s* (?P<time>.+?)  [\n\r]
    Vendors:  \s* (?P<vends>.+?) (?:\n\r?){2}'''
👤GVH

1👍

NLNL = "\r\n\r\n"

parts = s.split(NLNL)
result = NLNL.join(parts[1:3])
print(result)

which gives

Location: 5th St. @ Minna St.
Time: 11:00am-2:00pm

Vendors:
Kasa Indian
Fiveten Burger
Hiyaaa
The Rib Whip
Mayo & Mustard

Leave a comment