Wednesday, December 25, 2024
Google search engine
HomeLanguagesPython | Check if string matches regex list

Python | Check if string matches regex list

Sometimes, while working with Python, we can have a problem we have list of regex and we need to check a particular string matches any of the available regex in list. Let’s discuss a way in which this task can be performed. 

Method : Using join regex + loop + re.match() This task can be performed using combination of above functions. In this, we create a new regex string by joining all the regex list and then match the string against it to check for match using match() with any of the element of regex list. 

Python3




# Python3 code to demonstrate working of
# Check if string matches regex list
# Using join regex + loop + re.match()
import re
 
# initializing list
test_list = ["gee*", "gf*", "df.*", "re"]
 
# printing list
print("The original list : " + str(test_list))
 
# initializing test_str
test_str = "neveropen"
 
# Check if string matches regex list
# Using join regex + loop + re.match()
temp = '(?:% s)' % '|'.join(test_list)
res = False
if re.match(temp, test_str):
    res = True
 
# Printing result
print("Does string match any of regex in list ? : " + str(res))


Output

The original list : ['gee*', 'gf*', 'df.*', 're']
Does string match any of regex in list ? : True

Another approach could be using a regular expression library like ‘fnmatch’ which can use ‘filter’ function to check if the string matches any of the regex in the list, this approach would have a time complexity of O(n) where n is the number of regex in the list and a space complexity of O(1) as it does not require any additional data structures.

Python3




import fnmatch
 
# initializing list
test_list = ["gee*", "gf*", "df.*", "re"]
   
# printing list
print("The original list : " + str(test_list))
   
# initializing test_str
test_str = "neveropen"
   
# Check if string matches regex list
# Using filter + fnmatch
res = bool(list(filter(lambda x: fnmatch.fnmatch(test_str, x), test_list)))
 
# Printing result
print("Does string match any of regex in list ? : " + str(res))


Output

The original list : ['gee*', 'gf*', 'df.*', 're']
Does string match any of regex in list ? : True

The complexity analysis for this approach depends on the size of the input list and the length of the input string.

  1. The filter function is used to filter elements from the test_list that match the given regular expression (in this case, fnmatch.fnmatch(test_str, x)). The time complexity of the filter function is O(n), where n is the number of elements in the input list.
  2. The fnmatch.fnmatch function is used to match the input string with each regular expression in the filtered list. The time complexity of this function is O(k), where k is the length of the input string.
  3. The list function is used to convert the filtered result into a list. The time complexity of this function is O(n), where n is the number of elements in the filtered list.

Overall, the time complexity of this approach is O(n*k) where n is the number of elements in the input list and k is the length of the input string. 
Auxiliary Space  is O(n)

Method 3 :  using fnmatch library

  1. Import the fnmatch library.
  2. Use a list comprehension to create a list of Boolean values indicating whether each regular expression in test_list matches test_str using fnmatch.fnmatch().
  3. Check if True exists in the list created in step 2 using the any() function.
  4. Print the result.

Python3




import fnmatch
 
# initializing list
test_list = ["gee*", "gf*", "df.*", "re"]
 
# printing list
print("The original list : " + str(test_list))
 
# initializing test_str
test_str = "neveropen"
 
# Check if string matches regex list
# Using list comprehension + fnmatch
res = any(fnmatch.fnmatch(test_str, pattern) for pattern in test_list)
 
# Printing result
print("Does string match any of regex in list ? : " + str(res))


Output

The original list : ['gee*', 'gf*', 'df.*', 're']
Does string match any of regex in list ? : True

Time complexity: O(n), where n is the number of regular expressions in test_list.
Auxiliary space: O(1) for res, O(n) for the list comprehension created in step 2.

RELATED ARTICLES

Most Popular

Recent Comments