Sunday, September 30, 2018

python - Python3 - Generate string matching multiple regexes, without modifying them

Answer


Answer




I would like to generate string matching my regexes using Python 3. For this I am using handy library called rstr.






  • ^[abc]+.

  • [a-z]+






I must find a generic way, how to create string that would match both my regexes.





Modify both regexes or join them in any way. This I consider as ineffective solution, especially in the case if incompatible regexes:




import re
import rstr

regex1 = re.compile(r'^[abc]+.')
regex2 = re.compile(r'[a-z]+')

for index in range(0, 1000):
generated_string = rstr.xeger(regex1)
if re.fullmatch(regex2, generated_string):
break;

else:
raise Exception('Regexes are probably incompatibile.')

print('String matching both regexes is: {}'.format(generated_string))


Is there any workaround or any magical library that can handle this? Any insights appreciated.








Asker already has the string, which he just want to check against multiple regexes in the most elegant way. In my case we need to generate string in a smart way that would match regexes.


Answer



I solved this using a little alternative approach. Notice second regex is basically insurance so only lowercase letters are generated in our new string.



I used Google's python package sre_yield which allows charset limitation. Package is also available on PyPi. My code:



import sre_yield
import string


sre_yield.AllStrings(r'^[abc]+.', charset=string.ascii_lowercase)[0]
# returns `aa`

No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...