Как извлечь название университета / школы / колледжа из строки в python с помощью регулярного выражения? - PullRequest
0 голосов
/ 06 декабря 2018

SAMPLE CODE

import re
line = "should we use regex more often, University of Pennsylvania. let me know at  321dsasdsa@dasdsa.com.lol"
match = re.search(r'/([A-Z][^\s,.]+[.]?\s[(]?)*(Hospital|University|Institute|Law School|School of|Academy)[^,\d]*(?=,|\d)/', line)
print(match.group(0))

Я пытаюсь извлечь имена университетов / школ / организаций из заданной строки, используя регулярное выражение в python, но выдает сообщение об ошибке.

СООБЩЕНИЕ ОБ ОШИБКЕ

Traceback (последний вызов был последним): файл "C: /Python/addOrganization.py", строка 4, в печати (match.group (0)) AttributeError: объект 'NoneType' не имеет атрибута 'group'

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Тестовая строка, которую вы дали, является составной, так как сразу после имени университета следует символ конца строки '.'в то время как другие примеры в вашем образце пастбина этого не делают (за ними следует запятая).

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']
0 голосов
/ 06 декабря 2018

Вместо поиска попробуйте re.sub напечатать ожидаемый результат

import re
i = "should we use regex more often, University of Pennsylvania. let me know at  321dsasdsa@dasdsa.com.lol"
line = re.sub(r"[\w\W]* ((Hospital|University|Centre|Law School|School|Academy|Department)[\w -]*)[\w\W]*$", r"\1", i)
print line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...