Identifying string success flag - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Identifying string success flag (/thread-20487.html) |
Identifying string success flag - graham23s - Aug-13-2019 Hi Guys, I have a string of text seperated by a pipe symbol like: # a list of flags to look for on success ... submit_success = "TEXT_1|TEXT_2|TEXT_3|etc" # if a flag is found do our routines ... if any(s in self.driver.page_source for s in submit_success.split('|')): # run this code once a submit_success flag is foundOnce one of those TEXT strings is found in the html we mark it as a success. What i'm having trouble with is, how can i find out which of the "submit_success" flags was found? Any help would be appreciated. cheers RE: Identifying string success flag - ichabod801 - Aug-13-2019 If you can be sure that submit_success only contains relevant flags, and nothing you're not interested in, you can just use the split string. Otherwise, you could use a set: valid_flags = set('a|e|i|o|u'.split('|')) current_flags = 'c|r|a|i|g' matched_flags = valid_flags.intersection(current_flags.split('|')) # will be set(['a', 'i']) RE: Identifying string success flag - metulburr - Aug-13-2019 built in any function only returns a boolean. As is i dont believe there is a way within the builtin to return the matches. Thus you would have to build your own any function that returns the matches. RE: Identifying string success flag - nilamo - Aug-14-2019 (Aug-13-2019, 05:07 PM)graham23s Wrote: What i'm having trouble with is, how can i find out which of the "submit_success" flags was found?If you want to keep track of an intermediate value, using any() might not be the best, since the assumption is that it's a side-effect free operation. It doesn't have to be side-effect free, you just need to put a little effort into getting it to work.>>> class ValueFinder: ... def __init__(self, callback): ... self.callback = callback ... self.match = None ... self.match_found = False ... def __call__(self, test): ... if self.callback(test): ... self.match = test ... self.match_found = True ... return self.match_found ... >>> submit_success = "TEXT_1|TEXT_2|TEXT_3|etc".split("|") >>> page_source = '''one fish, TEXT_2 fish, red fish, blue fish''' >>> finder = ValueFinder(lambda x: x in page_source) >>> if any(finder(s) for s in submit_success): ... print(finder.match) ... TEXT_2Or, instead of using any() , you could roll your own:>>> submit_success = "TEXT_1|TEXT_2|TEXT_3|etc".split("|") >>> page_source = '''one fish, TEXT_2 fish, red fish, blue fish''' >>> def first(test, seq): ... for item in seq: ... if test(item): ... return item ... return None ... >>> match = first(lambda s: s in page_source, submit_success) >>> if match: ... print(match) ... TEXT_2Once python 3.8 is out, you could also use the walrus operator to do this: submit_success = "TEXT_1|TEXT_2|TEXT_3|etc" if any((match := s) in self.driver.page_source for s in submit_success.split('|')): # "match" is the TEXT_ value that matched RE: Identifying string success flag - graham23s - Aug-14-2019 Thank you very much guys! solved the issue using your help. Python 3.8 does look good :) |