import re
def match_query_pattern(query, patterns):
"""
Matches a query string against a list of patterns, with fallback logic.
Args:
query (str): The query string to match.
patterns (list of tuples): A list of (pattern, value) tuples.
Pattern is a regex string.
Returns:
str: The matched value if a pattern matches, otherwise None.
"""
for pattern, value in patterns:
match = re.search(pattern, query) # Search for the pattern in the query
if match:
return value # Return the value if a match is found
return None # Return None if no pattern matches
if __name__ == '__main__':
# Example Usage
patterns = [
(r"color=(.*)", "color"), # Matches "color=..." and returns "color"
(r"size=(.*)", "size"), # Matches "size=..." and returns "size"
(r"price=(\d+\.?\d*)", "price"), # Matches "price=..." and returns "price"
(r"category=(.*)", "category"), # Matches "category=..." and returns "category"
(r"discount=(.*)", "discount") # Matches "discount=..." and returns "discount"
]
query1 = "color=red&size=large"
query2 = "price=25.99"
query3 = "category=electronics&discount=10%"
query4 = "someotherparam=value"
query5 = "size=small&color=blue"
query6 = "invalid_param=value"
print(f"Query: {query1}, Match: {match_query_pattern(query1, patterns)}")
print(f"Query: {query2}, Match: {match_query_pattern(query2, patterns)}")
print(f"Query: {query3}, Match: {match_query_pattern(query3, patterns)}")
print(f"Query: {query4}, Match: {match_query_pattern(query4, patterns)}")
print(f"Query: {query5}, Match: {match_query_pattern(query5, patterns)}")
print(f"Query: {query6}, Match: {match_query_pattern(query6, patterns)}")
Add your comment