Problem creating a regular expression to parse open-iscsi, iscsiadm output (help?)

Andreas Perstinger andipersti at gmail.com
Thu Jun 13 03:17:28 EDT 2013


On 13.06.2013 02:59, rice.cruft at gmail.com wrote:
> I am parsing the output of an open-iscsi command that contains
> severalblocks of data for each data set. Each block has the format:
[SNIP]
> I tried using \s* to swallow the whitespace between the to iSCSI
> lines. No joy... However [\s\S]*? allows the regex to succeed. But that
> seems to me to be overkill (I am not trying to skip lines of text here.)
> Also note that I am using \ + to catch spaces between the words. On the
> two problem lines, using \s+ between the label words fails.

Changing
>          # Connection state
>          iSCSI\ +Connection\ +State:\s+(?P<connState>\w+\s*\w*)
>          [\s\S]*?    <<<<<< without this the regex fails
>          # Session state
>          iSCSI\ +Session\ +State:\s+(?P<sessionState>\w+)

to
         # Connection state
         iSCSI\s+Connection\s+State:\s+(?P<connState>\w+\s*\w*)\s*
         # Session state
         iSCSI\s+Session\s+State:\s+(?P<sessionState>\w+)

gives me

 >>> # 'test' is the example string
 >>> myDetails = [ m.groupdict() for m in regex.finditer(test)]
 >>> print myDetails
[{'initiatorIP': '221.128.52.214', 'connState': 'LOGGED IN', 'SID': 
'154', 'ipaddr': '221.128.52.224', 'initiatorName': 
'iqn.1996-04.de.suse:01:7c9741b545b5', 'sessionState': 'LOGGED_IN', 
'iqn': 'iqn.1992-04.com.emc:vplex-000000008460319f-0000000000000007', 
'tag': '7', 'port': '3260'}]

for your example (same for the original regex).
It looks like it works (Python 2.7.3) and there is something else 
breaking the regex.

Bye, Andreas



More information about the Python-list mailing list