#regex #web-scraping
#регулярное выражение #очистка веб-страниц
Вопрос:
У меня есть куча строк, подобных этой, в файле:
M.S., Arizona University, Tucson, Az., 1957
B.A., American International College, Springfield, Mass., 1978
B.A., American University, Washington, D.C., 1985
и я хотел бы извлечь Университет Тафтса, Американский международный колледж, Американский университет, Университет Массачусетса и т.д., Но не средние школы (вероятно, можно с уверенностью предположить, что если он содержит «Академию» или «Среднюю школу», то это средняя школа). Есть идеи?
Ответ №1:
Протестировано с preg_match_all
на PHP, будет работать для предоставленного вами образца текста:
/(?<=,)[ws]*(College|University|Institute)[^,d]*(?=,|d)/
Потребуется несколько изменить, если ваш движок регулярных выражений не поддерживает поисковые системы.
Обновление: я просмотрел ваш связанный образец текста и соответствующим образом обновил регулярное выражение
/([A-Z][^s,.] [.]?s[(]?)*(College|University|Institute|Law School|School of|Academy)[^,d]*(?=,|d)/
Первая часть будет соответствовать строке, начинающейся с заглавной буквы, за которой необязательно следует .
. Затем пробел, затем необязательно (
. Этот шаблон сопоставляется ноль или более раз.
При этом должны быть получены все соответствующие слова, предшествующие ключевым словам.