refactoring

This commit is contained in:
frankknoll
2023-03-23 18:12:10 +01:00
parent cba9b7e643
commit ef9c026a69
2 changed files with 22 additions and 17 deletions

19
src/SmartRegexpFactory.py Normal file
View File

@@ -0,0 +1,19 @@
import re
# adapted from function _fnFilterCreateSearch() defined in https://github.com/DataTables/DataTablesSrc/blob/master/js/core/core.filter.js
class SmartRegexpFactory:
def createSmartRegexp(self, searchTerm):
return re.compile(
rf'^{self.assertContainsWords(self.getWords(searchTerm))}.*$',
flags=re.IGNORECASE)
def getWords(self, searchTerm):
return re.split(r'\s+', searchTerm)
def assertContainsWords(self, words):
return ''.join([self.assertContainsWord(word) for word in words])
def assertContainsWord(self, word):
return f'(?=.*?{word})'

View File

@@ -1,25 +1,11 @@
import re import re
from SmartRegexpFactory import SmartRegexpFactory
class SmartSearch: class SmartSearch:
def __init__(self, searchTerm): def __init__(self, searchTerm):
self.regexp = _SmartRegexpFactory().createSmartRegexp(searchTerm) self.smartRegexp = SmartRegexpFactory().createSmartRegexp(searchTerm)
def matches(self, str): def matches(self, str):
return True if re.match(self.regexp, str, flags=re.IGNORECASE) else False return True if self.smartRegexp.match(str) else False
class _SmartRegexpFactory:
def createSmartRegexp(self, searchTerm):
return rf'^{self.assertContainsWords(self.getWords(searchTerm))}.*$'
def getWords(self, searchTerm):
return re.split(r'\s+', searchTerm)
def assertContainsWords(self, words):
return ''.join([self.assertContainsWord(word) for word in words])
def assertContainsWord(self, word):
return f'(?=.*?{word})'