Я пытаюсь найти символ «в большом тексте, когда ему непосредственно предшествует, а за ним следует только слово или символ. Затем я хочу заменить его на этот символ, не меняя слово / число до и после него:»

Я попробовал это:

text7 = re.sub(r'(\w)"(\w)', r"$1\'$2", text6)

Для слова "это" все, что я получаю сейчас, это я $ 1 '$ 2. Что я хочу, это "это" Есть предложения?

1
John 28 Фев 2018 в 19:50

3 ответа

Лучший ответ

Используйте взгляд назад и взгляд вперед; они просто выглядят без изменения текста замены:

text7 = re.sub(r'(?<=\w)"(?=\w)', "'", text6)
1
DBedrenko 28 Фев 2018 в 16:55

Вы можете просто использовать \b"\b заменить на '. \b является границей слова и соответствует везде, где встречаются следующие совпадения (без использования символов): ^\w|\w$|\W\w|\w\W.

Смотрите код в использовании здесь

import re
print(re.sub(r'\b"\b', "'", 'it"s'))

Постскриптум В python \1 или \g<1> используются для ссылки на группы захвата, а не $1, поскольку вместо этого они будут интерпретироваться буквально. Для получения дополнительной информации см. re.sub() документацию по python.

0
ctwheels 28 Фев 2018 в 17:01

Для получения справки по модулю re я рекомендую запустить help(re) в вашем интерпретаторе (или pydoc re из командной строки). Это выложено очень удобно, и мне легче следовать, чем онлайн-документация.

Решение:

>>> import re
>>> text6 = 'it"s'
>>> print(re.sub(r'(\w)"(\w)', r"\1'\2", text6))
it's

Вы использовали $1 для сопоставления с группой 1, но в Python это \1. Также у вас был лишний \ перед одинарной кавычкой в строке замены.

0
Micah Culpepper 28 Фев 2018 в 16:57