У меня есть 2 файла, и я хочу получить все строки из файла2 (fsearch), которые содержат любую строку из файла1 (forig)
Я написал простой скрипт python, который выглядит так:Python cross-file search with regexp
def search_string(w, file):
global matches
reg = re.compile((r'(^|^.*\|)' + w.strip("\r\n") + r'(\t|\|).*$'), re.M)
match = reg.findall(file)
matches.extend(match)
fsearch_text = fsearch.read()
for fword in forig:
search_string(fword, fsearch_text)
Есть около 100 000 строк в file1 и около 200 000 строк в file2, так что мой сценарий занимает около 6 часов.
Есть ли лучший алгоритм для достижения той же цели за меньшее время?
Edit: я должен был обеспечить пример, почему мне нужно регулярное выражение:
Я ищу список слов в file1 и пытается сопоставить их с переводами из file2. Если я не использую regexp для ограничения возможных совпадений, я также сопоставляю переводы для слов, которые содержат только слово I, как часть себя, например:
Word I search: 浸 し
Согласованное слово: お 浸 し | 御 浸 し | 御し た し & n отварная зелень в соевом соусе с бонитовым соусом (овощная боковая тарелка)
Итак, мне нужно ограничить начало матча либо^или |, либо конец матча \ t или |, но зафиксировать всю строку
использование регулярного выражения и «сравнить каждую строку с каждой строкой» делает его настолько медленным ... 100000 * 200000 = 2e10 сравнения с регулярным выражением – m13r
после вашего редактирования, возможно ли индексировать каждое слово? – lemon