Поиск подстрок в строке, которые соответствуют определенному условию - PullRequest
1 голос
/ 25 июня 2019

Это своего рода продолжение моего другого поста: Извлечение чисел из строки при определенных условиях

Подводя итог, у меня есть несколько строк, которые хранятся в фрейме данных, и я хочуизвлечь первое число, соответствующее всем условиям (если оно существует).Вот условия:

  • Число НЕ МОЖЕТ быть в начале строки

  • Оно НЕ МОЖЕТ появиться после слова "№" илипосле слова «Вопрос»

  • Число НЕ МОЖЕТ быть между значениями 1960 - 2020

  • Если после номера сразу следует буква eЯ хочу извлечь е с его помощью

Это то, что я до сих пор, чтобы найти числа, он заботится о первых двух условиях:

for index, row in df.iterrows():
    test = re.search(r'(?!^)(?<!\bNo\.\s)(?<!\bQuestion\s)(\d+)(?!\d)',
                     row['name'])
    if test:
        df.loc[
            df['name'] == row['name'], ['id']] = test.group()

Я также пытался использовать:

\b(?!196[0-9]\d|20[012][0])\d+\b

, чтобы учесть число, которое не находится между значениями 1960 - 2020 гг., Но, похоже, оно не работает.Я также не понимаю, как поймать e, если он там есть.

Пример 1:

"Trial No. 32819 Question 485 Article 787e"

Я бы хотел, чтобы выражение регулярного выражения возвращало

[787e]

Пример 2:

"2981 XYZ Legislature"

Я бы хотел, чтобы выражение regex возвращало

None

Пример 3 "

"Addendum217Null"

Я хотел бы, чтобы выражение regex возвращалось

[217]

Заранее спасибо за любую помощь!

1 Ответ

5 голосов
/ 25 июня 2019

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

(?!^)(?<!\bNo\.\s)(?<!\bQuestion\s)(?<!\d)(?!(?:19[6-9][0-9]|20[01][0-9]|2020)(?!\d))(\d+(?!\d)e?)

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

Новая часть (?<!\d)(?!(?:19[6-9][0-9]|20[01][0-9]|2020)(?!\d))(\d+(?!\d)e?):

  • (?<!\d) - слева от текущего местоположения не допускается никакая цифра
  • (?!(?:19[6-9][0-9]|20[01][0-9]|2020)(?!\d)) - отрицательный прогноз, который не дает совпадения, если непосредственно справа от текущего местоположения есть число от 1960 до2020 не сопровождается цифрой
  • (\d+(?!\d)e?) - Группа 1 (то, что вы получите): 1+ цифр, за которыми не следует цифра и дополнительная e буква
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...