Как правильно использовать метод «Заменить» для набора символов в Python - PullRequest
0 голосов
/ 03 февраля 2019
import re

words = ['Duration12:1', 'Noun', 'Adjective7:8']
result = ([re.sub(r'[0-9]+', r'[\g<0>]', w) for w in words])

['Продолжительность [12]: [1]', 'Существительное', 'Прилагательное [7]: [8]']

Но теперь после

repResult = [x.replace(':[%d]', ':%d') for x in result]

Я снова получаю

['Продолжительность [12]: [1]', 'Существительное', 'Прилагательное [7]: [8]']

хотя я ожидаю замены символов, которые должны быть

['Продолжительность [12]: 1', 'Существительное', 'Прилагательное [7]: 8']

Правильный ли здесь синтаксис использования метода или я что-то упустил?

1 Ответ

0 голосов
/ 04 февраля 2019

Вы используете replace неправильно, потому что вы ищете строковый литерал «% d».Это не RegEx.

Вы можете исправить свой код следующим образом:

import re

words = ['Duration12:14254', 'Noun', 'Adjective7:888']
result = [re.sub(r'[0-9]+', r'[\g<0>]', w) for w in words]
repResult = [re.sub(r':\[(\d+)\]', r':\1', w) for w in result]
print(repResult)

Вы получите:

['Duration[12]:1', 'Noun', 'Adjective[7]:8']

С ['Duration12:14254', 'Noun', 'Adjective7:888'] вы получите:

['Duration[12]:14254', 'Noun', 'Adjective[7]:888']

Этот код можно упростить, используя один RegEx:

import re

words = ['Duration12:14254', 'Noun', 'Adjective7:888']
result = [re.sub(r'(\d+):(\d+)', r'[\1]:\2', w) for w in words]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...