Pywikipedia (Python) регулярное выражение для добавления строки, если не хватает - PullRequest
0 голосов
/ 01 марта 2012

У меня есть набор записей, таких как:

Имя

  • Имя Пол Берри: присутствует
  • Адрес Джорджа Некки: нет
  • Имя Боб ван Бастен: присутствует
  • Имя Ричард фон Рампи: не присутствует
  • Имя папочки: отсутствует
  • Имя Пол Берри: присутствует
  • Улица Джорджа Некки: нет
  • Улица Боба ван Бастена: присутствует
  • Имя Ричард фон Рампи: отсутствует
  • Знак городского папочки: нет

и я хочу, чтобы все записи, начинающиеся с Имя , имели вид

  • Имя Имя Фамилия : отсутствует

оставляя нетронутыми записи, начинающиеся с другого слова.

т.е. Я хочу добавить строку «не» в записи, начинающиеся с Имя , где это не так. Я работаю с python (pywikipediabot)

Пытаясь

python replace.py -dotall -regex 'Name ((?!not ).*?)present' 'Name \1not present'

но оно добавляет "нет" даже там, где оно уже присутствует.

Может быть, я не понял синтаксис «отрицательный прогноз»?

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Просто найдите : present и замените его на : not present.

Редактировать: Улучшен ответ:

for line in lines:
    m = re.match('^Name[^:]*: present', line)
    if m:
        print re.sub(': present', ': not present', line)
    else:
       print line
0 голосов
/ 01 марта 2012

Вам нужно выражение "отрицательный взгляд".Эта подстановка будет работать:

'Name (.*)(?<!not )present' -> 'Name \1not present'

. * Соответствует всему между «Именем» и «настоящим», но все регулярные выражения соответствуют, только если «присутствующим» не предшествует «не».

А ты уверен, что тебе нужно -dotall?Похоже, вы хотите, чтобы .* соответствовало в только строке.

0 голосов
/ 01 марта 2012

Это будет делать следующее:

re.sub(r'(Name.*?)(not )?present$', r'\1not present', s)
...