import re
regex = re.compile(r"((?'field'[a-z_]+)\s+(?'operator'eq|ne|gt|lt|ge|le)\s+(?'value'(?>'[\w\-:\s]+')|(?>[\w]+))(\s+(?'join'and|or))?)+")
test_str = ("activity_id eq 9 and \n"
" status eq 'active asdf activity_id eq 9 and var gt 3' \n"
"status eq 'active' and activity_id eq 9 \n"
"activity_id eq 9 \n"
"status eq 'active' \n"
"status eq 'active asdf activity_id eq 9 and var gt 3' and activity_id eq 9\n"
"activity_id eq 9\n"
"status eq 'active' \n"
"status eq 'active\n"
" and done' \n"
"activity_id eq 9 and status eq 'active'\n"
"activity_id eq 9 or status eq 'active'\n"
"status eq 'active' \n"
"and activity_id eq 9\n"
"status eq 'active' or activity_id eq 9\n"
"status eq 'active and done' and activity_id eq 9\n"
"status eq 'active and done' or activity_id eq 9\n"
"activity_id eq 9 and start_date le '2021-03-20T00:00:00-00:00'\n"
"start_date le '2021-03-20T00:00:00-00:00'")
subst = ""
result = regex.sub(subst, test_str)
if result:
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html