Каким будет эквивалентное регулярное выражение в python? - PullRequest
0 голосов
/ 08 декабря 2018

КОД В PHP

<?php
    $str = "CSIR-National Botanical Research Institute, Plant Transgenic Laboratory, U.P., India. Electronic address: i.sanyal@nbri.res.in.";
    preg_match("/([A-Z][^\s,.]+[.]?\s[(]?)*(Hospital|University|Institute|Law School|School of|Academy|College)[^,\d]*(?=,|\d)/", $str, $org_arr);
    echo $org_arr[0];   
?>

ВЫХОД

CSIR-Национальный институт ботанических исследований

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

КОД В ПИТОНЕ

import re
line = "CSIR-National Botanical Research Institute, Plant Transgenic Laboratory, U.P., India. Electronic address: i.sanyal@nbri.res.in."
match = re.search(r'/([A-Z][^\s,.]+[.]?\s[(]?)*(Hospital|University|Institute|Law School|School of|Academy|College)[^,\d]*(?=,|\d)/', line)
print(match.group(0))

ДАЕТ СООБЩЕНИЕ ОБ ОШИБКЕ

Traceback (последний последний вызов):Файл "C: \ Users \ Ghost Rider \ Documents \ Python \ temp.py", строка 4, в печати (match.group (0)). AttributeError: У объекта 'NoneType' нет атрибута 'group'

1 Ответ

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

редактировать:

Приятные дополнительные детали.Вы получаете сообщение об ошибке типа None, потому что шаблон ничего не соответствует;Проще показать, как проверить, чем объяснить ...

Итак, давайте немного изменим ваш пример и посмотрим, будет ли это то, что вы ищете.Обратите внимание на отсутствие начальных и конечных слешей на шаблоне (см. оригинал , ниже).

import re
txt = "CSIR-National Botanical Research Institute, Plant Transgenic Laboratory, U.P., India. Electronic address: i.sanyal@nbri.res.in."
# note: str is the string class type, python would happily let you assign that to a string literal.
print('txt={}'.format(txt))
pattern = r'([A-Z][^\s,.]+[.]?\s[(]?)*(Hospital|University|Institute|Law School|School of|Academy|College)[^,\d]*(?=,|\d)'
m = re.search(pattern, txt)
if m:
    print('found some things, groups={}'.format(m.groups()))
else:
    print('no match')

результаты:

txt=CSIR-National Botanical Research Institute, Plant Transgenic Laboratory, U.P., India. Electronic address: i.sanyal@nbri.res.in.
found some things, groups=('Research ', 'Institute')

Я думаю $org_arr часть в PHP настроена в списке Python m.groups () .

original:

Возможно, попробуйте в Python без начальных и конечных слешей?Давайте начнем с создания простого шаблона ...

Пример PHP

Эти Документы PHP показывают этот пример:

// The "i" after the pattern delimiter indicates a case-insensitive search
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
    echo "A match was found.";
} else {
    echo "A match was not found.";
}

Так как они 'при поиске php косые черты выглядят как разделители шаблонов.

тот же пример в python

В Python это будет так (не шаблон r'php ', не r '/ php /').

import re
if re.match( r'php', 'PHP is the web scripting language of choice.', re.IGNORECASE):
    print('A match was found.')
else:
    print('A match was not found.')

Чуть более полезным было бы сохранение объекта соответствия, чтобы вы могли использовать свои группы ...

import re
m = re.match( r'(php)', 'PHP is the web scripting language of choice.', re.IGNORECASE)
if m:
    print('A match was found, group(1)={}'.format(m.group(1)))
else:
    print('A match was not found.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...