Тестовая строка, которую вы дали, является составной, так как сразу после имени университета следует символ конца строки '.'в то время как другие примеры в вашем образце пастбина этого не делают (за ними следует запятая).
line = should we use regex more often, University of Pennsylvania. let me know at 321dsasdsa@dasdsa.com.lol
Мне удалось извлечь имена с помощью простого регулярного выражения для примеров в вашем pastebin
, подробности вы можете увидеть здесь: regex101.com
Логика
Поскольку название института разделено запятой (за исключением первого случая, когда оно начинается с имени университета), вы можете видеть, что строка совпадения будет лежать в group1
или group2
.
Затем вы можете выполнить итерацию по group1
& group2
, чтобы посмотреть, соответствует ли оно чему-либо в предварительно определенном списке совпадений, и вернуть значение.
Код
Я использовал два примера, чтобы показать, как это работает.
line1 = 'The George Washington University, Washington, DC, USA.'
line2 = 'Department of Pathology, University of Oklahoma Health Sciences Center, Oklahoma City, USA. adekunle-adesina@ouhsc.edu'
matchlist = ['Hospital','University','Institute','School','School','Academy'] # define all keywords that you need look up
p = re.compile('^(.*?),\s+(.*?),(.*?)\.') # regex pattern to match
# We use a list comprehension using 'any' function to check if any of the item in the matchlist can be found in either group1 or group2 of the pattern match results
line1match = [m.group(1) if any(x in m.group(1) for x in matchlist) else m.group(2) for m in re.finditer(p,line1)]
line2match = [m.group(1) if any(x in m.group(1) for x in matchlist) else m.group(2) for m in re.finditer(p,line2)]
print (line1match)
[Out]: ['The George Washington University']
print (line2match)
[Out]: ['University of Oklahoma Health Sciences Center']