Как игнорировать конкретное слово в взгляде сзади? - PullRequest
3 голосов
/ 05 октября 2019

Полная строка:

See Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.
**Here Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.**

Я использую этот код, чтобы получить предложение в **:

(?i)(?<=\D|![see])Item.+?1A.+?Risk Factors(?=\D)(.+?)(?=Item 1B|$)

, дав конкретное слово See, чтобы игнорировать его.

Но он по-прежнему принимает оба предложения.

Ответы [ 3 ]

0 голосов
/ 05 октября 2019

Я бы порекомендовал другой шаблон (?<=\*\*).+?(?=\*\*)

Объяснение:

(?<=\*\*) - положительный взгляд за спиной: подтвердите, что предшествует **

.+? -соответствует одному или нескольким символам (без жадности)

(?=\*\*) - положительный прогноз: подтвердить следующее: **

Демо

0 голосов
/ 05 октября 2019

Если вы хотите добавить квантификатор )(?<!\bSee\b.*) в вид сзади, вы можете использовать модуль регулярных выражений PyPi .

(?<=\D)(?<!\bSee\b.*)Item.+?1A.+?Risk Factors(?=\D)(.+?)(?=Item 1B|$)

Демо Python

Предполагая, что ** указывает на разницу между предложениями, которые вы видите, второе соответствует из-за ** в конце.

Например

import regex

pattern = r"(?i)(?<=\D)(?<!\bSee\b.*)Item.+?1A.+?Risk Factors(?=\D)(.+?)(?=Item 1B|$)"
test_str = ("See Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.\n"
            "**Here Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.**")
m = regex.search(pattern, test_str)
print(m.group())

Вывод

Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.**

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

Совпадение по всей строке, где See предшествует Item, и захват в группу 1 с использованием шаблона со взором позади, утверждающего не цифру.

(?:^(?:(?!\bItem\b.)*)See\b.*|((?<=\D)Item.+?1A.+?Risk Factors(?=\D).+?(?=Item 1B|$)))

Regex demo

0 голосов
/ 05 октября 2019

Попробуйте

(?i)(?<=\D)(?<!See )Item.+?1A.+?Risk Factors(?=\D)(.+?)(?=Item 1B|$)

Это означает иметь что-то отличное от цифры до (?<=\D), но также отказываться от вещи "Видеть" (?<!See ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...