I have some string values formatted like this:
# ltm virtuals above
ltm virtual Common/vserver.enterprise.com {
destination Common/vserver.enterprise.com
ip-protocol tcp
mask x.x.x.x
partition Common
persist {
Common/cookie_30_minutes {
default yes
}
}
pool Common/prod.enterprise.com
profiles {
Common/prod.enterprise.com-clientssl {
context clientside
}
Common/prod.enterprise.com_https { }
Common/oneconnect { }
Common/tcp-lan-optimized { }
}
rules {
Common/restrict_public_addresses
Common/pool_members_list
}
source 0.0.0.0/0
source-address-translation {
type automap
}
translate-address enabled
translate-port enabled
vs-index 57
}
# other values just like the above with different rules, virtual servers, etc, repeat
I need to figure out how to get each one of these blocks, but only if they contain
rules {
Common/restrict_on_site_access_building_2
# could be more rules but I wouldn't care
}
So if that rule is found, return the entire block from "ltm virtual" to the last closing bracket. I've tried several regex's but I keep getting tripped up by the either opening and closing brackets in the other portions of "ltm virtual" or I jump over the entire block and into another set of ltm virtual block(s).
I would split the text
by using "ltm virtual "
as the delimiter between blocks.
Then just search for the text to find
by using the in
keyword. In this case I have just printed the result. However, it would be just as easy to append to a list or equivalent structure (if required).
import re
text_to_find = "Common/restrict_on_site_access_building_2"
ltm_blocks = re.split('ltm virtual ', text)
for lines in ltm_blocks:
if text_to_find in lines:
result = "ltm virtual "+ lines
print(result)
ltm virtual Common/vserver.enterprise.com {
destination Common/vserver.enterprise.com
ip-protocol tcp
mask x.x.x.x
partition Common
persist {
Common/cookie_30_minutes {
default yes
}
}
pool Common/prod.enterprise.com
profiles {
Common/prod.enterprise.com-clientssl {
context clientside
}
Common/prod.enterprise.com_https { }
Common/oneconnect { }
Common/tcp-lan-optimized { }
}
rules {
Common/restrict_public_addresses
Common/restrict_on_site_access_building_2
}
source 0.0.0.0/0
source-address-translation {
type automap
}
translate-address enabled
translate-port enabled
vs-index 57
}