Почему это регулярное выражение не соответствует всему до повторения первой группы захвата? - PullRequest
0 голосов
/ 08 июня 2018

А как мне это сделать?

Сейчас он останавливается на разрывах строк (как сразу после «Чикаго»).В качестве альтернативы, если я использую DOTALL, он просто соответствует «Abbott A (1988)», а затем остальной части строки до самого конца.Я хотел бы остановиться на следующем появлении (([\ w \ s] +) (([1 | 2] \ d {3}))), то есть ... »Albu OB и Flyverbom M (2016)».И так далее и тому подобное.

Любые указатели приветствуются.

pattern = r"(([\w\s]+)\(([1|2]\d{3})\))(.*)"

образец строки

"Abbott A (1988) The System of Professions: An Essay on the Division of Expert Labor. Chicago,
IL: University of Chicago Press.
Albu OB and Flyverbom M (2016) Organizational transparency: conceptualizations, con-
ditions, and consequences. Business & Society. Epub ahead of print 13 July. DOI:
10.1177/0007650316659851.
Ananny M (2016) Toward an ethics of algorithms: convening, observation, probability, and timeli-
ness. Science, Technology & Human Values 41(1): 93–117. DOI: 10.1177/0162243915606523."

песочница здесь

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете использовать

(?sm)^([^()\n\r]+)\(([12]\d{3})\)(.*?)(?=^[^()\n\r]+\([12]\d{3}\)|\Z)

См. Демоверсию regex

Подробности

  • (?sm)- re.DOTALL и re.MULTILINE включены
  • ^ - начало строки
  • ([^()\n\r]+) - Группа 1: один или несколько символов, отличных от (, ),CR и LF
  • \( - (
  • ([12]\d{3}) - группа 2: 1 или 2, а затем любые 3 цифры
  • \) - ) char
  • (.*?) - Группа 3: любые 0+ символов, включая как можно меньше разрывов строк, вплоть до (но исключая из соответствия) первого ...
  • (?=^[^()\r\n]+\([12]\d{3}\)|\Z) - (положительный прогноз, требующий наличия его шаблона непосредственно справа от текущего местоположения):
    • ^[^()\r\n]+\([12]\d{3}\) - то же самое, что и начало шаблона, но без групп
    • | - или
    • \Z - конец всего текста.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...