Я использовал re.findall для токенизации строк, которые не всегда должны разделяться после слова (токен может иметь составные слова). Я получил токены описанным способом. Тем не менее, он не хранит точки, включенные в шаблон регулярного выражения.
Например, рассмотрим следующий код:
import re
all_domain=['com edu','.com edu','inc.', '.com', 'inc', 'com', '.edu', 'edu']
all_domain.sort(key=len, reverse=True)
domain_alternators = '|'.join(all_domain)
print(domain_alternators)
regex = re.compile(r'\b({}|[a-z-A-Z]+)\b'.format(domain_alternators))
print(regex)
#re.compile('\\b(.com edu|com edu|inc.|.com|.edu|inc|com|edu|[a-z-A-Z]+)\\b')
name= 'BASIC SCHOOL DISTRICT .COM'
result=regex.findall(name.lower())
он должен вернуть в результате ['basic', 'school', 'district', '.com']
, поскольку .com
имеет более высокий приоритет в генераторах (.com предшествует com в списках генераторов):
.com edu|com edu|inc.|.com|.edu|inc|com|edu
Как получить ['basic', 'school', 'district', '.com']
вместо ['basic', 'school', 'district', 'com']
Спасибо