Python - шаблон возврата re.sub вместо замены - PullRequest
1 голос
/ 03 августа 2020

Я пытаюсь изменить список ключей словаря в Python 3, чтобы их можно было идентифицировать по первому набору чисел в словаре, но похоже, что он возвращает шаблон регулярного выражения, а не набор чисел.

>>>> import re
>>>>re.sub(r'GraphImages_[0-9]{2}_edge_media_to_caption_edges_0_node_text', '(?<=GraphImages_)\n{3}', 'GraphImages_99_edge_media_to_caption_edges_0_node_text')
'(?<=GraphImages_)\n{3}'
>>>>re.sub(r'GraphImages_[0-9]{2}_edge_media_to_caption_edges_0_node_text', '(?<=GraphImages_)\n{3}', 'GraphImages_123_edge_media_to_caption_edges_0_node_text')
'(?<=GraphImages_)\n{3}'

Когда предполагаемый вывод из вышеприведенного вывода будет 99 и 123 соответственно.

Любые указания будут очень признательны. Я не очень разбираюсь в re пакете

Ответы [ 3 ]

1 голос
/ 03 августа 2020

Обнаружен громоздкий обходной путь в следующем

try_1 = re.sub('[^0-9]', "", 'GraphImages_99_edge_media_to_caption_edges_0_node_text')
try_2 = re.sub( '0$', "" , try_1)
1 голос
/ 03 августа 2020

Если вы просто хотите извлечь числа, вам нужно найти их, а не заменять:

re.findall("GraphImages_([0-9]{2,})", yourstring)[0]
#'99'

На самом деле, в вашем случае разделение может быть лучшим выбором:

yourstring.split("_")[1]
#'99'
0 голосов
/ 03 августа 2020

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

^\D+(\d+).+

См. Демонстрацию на regex101.com.

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