Python and Regular Expressions
Chris Rebert
clp2 at rebertia.com
Wed Apr 7 04:52:14 EDT 2010
On Wed, Apr 7, 2010 at 1:37 AM, Richard Lamboj <richard.lamboj at bilcom.at> wrote:
> i want to parse this String:
>
> version 3.5.1 {
>
> $pid_dir = /opt/samba-3.5.1/var/locks/
> $bin_dir = /opt/samba-3.5.1/bin/
>
> service smbd {
> bin = ${bin_dir}smbd -D
> pid = ${pid_dir}smbd.pid
> }
> service nmbd {
> bin = ${bin_dir}nmbd -D
> pid = ${pid_dir}nmbd.pid
> }
> service winbindd {
> bin = ${bin_dir}winbindd -D
> pid = ${pid_dir}winbindd.pid
> }
> }
>
> version 3.2.14 {
>
> $pid_dir = /opt/samba-3.5.1/var/locks/
> $bin_dir = /opt/samba-3.5.1/bin/
>
> service smbd {
> bin = ${bin_dir}smbd -D
> pid = ${pid_dir}smbd.pid
> }
> service nmbd {
> bin = ${bin_dir}nmbd -D
> pid = ${pid_dir}nmbd.pid
> }
> service winbindd {
> bin = ${bin_dir}winbindd -D
> pid = ${pid_dir}winbindd.pid
> }
> }
>
> Step 1:
>
> version 3.2.14 {
>
> $pid_dir = /opt/samba-3.5.1/var/locks/
> $bin_dir = /opt/samba-3.5.1/bin/
>
> service smbd {
> bin = ${bin_dir}smbd -D
> pid = ${pid_dir}smbd.pid
> }
> service nmbd {
> bin = ${bin_dir}nmbd -D
> pid = ${pid_dir}nmbd.pid
> }
> service winbindd {
> bin = ${bin_dir}winbindd -D
> pid = ${pid_dir}winbindd.pid
> }
> }
>
> Step 2:
> service smbd {
> bin = ${bin_dir}smbd -D
> pid = ${pid_dir}smbd.pid
> }
> Step 3:
> $pid_dir = /opt/samba-3.5.1/var/locks/
> $bin_dir = /opt/samba-3.5.1/bin/
>
> Step 4:
> bin = ${bin_dir}smbd -D
> pid = ${pid_dir}smbd.pid
>
> My Regular Expressions:
> version[\s]*[\w\.]*[\s]*\{[\w\s\n\t\{\}=\$\.\-_\/]*\}
> service[\s]*[\w]*[\s]*\{([\n\s\w\=]*(\$\{[\w_]*\})*[\w\s\-=\.]*)*\}
>
> I think it was no good Solution. I'am trying with Groups:
> (service[\s\w]*)\{([\n\w\s=\$\-_\.]*)
> but this part makes Problems: ${bin_dir}
Regular expressions != Parsers
Every time someone tries to parse nested structures using regular
expressions, Jamie Zawinski kills a puppy.
Try using an *actual* parser, such as Pyparsing:
http://pyparsing.wikispaces.com/
Cheers,
Chris
--
Some people, when confronted with a problem, think:
"I know, I'll use regular expressions." Now they have two problems.
http://blog.rebertia.com
More information about the Python-list
mailing list