Используйте python регулярное выражение с группами, чтобы получить замененные символы - PullRequest
0 голосов
/ 26 февраля 2020

Я ищу способ получить сгруппированные символы, которые re.sub () подставил из строки. Например, вот так:

#!/usr/bin/env python3

import re
sentence="This is whatever. Foo"

# remove punctuation mark
new_sentence = re.sub('([\.,:;])', '', sentence)

removed_punctuation_mark = ??????????????

print(removed_punctuation_mark)

... как получить удаленную точку? Существует функция re.subn (), которая показывает только, что один символ был удален, но не какой.

Или, чтобы объяснить это по-другому, выполните в python то, что делает этот скрипт perl:

#!/usr/bin/perl

$sentence = "This is whatever. Foo";

# remove punctuation mark
$sentence =~ s/([\.,:;])//;

# first group of () in regex above
$removed_punctuation_mark = $1;    

print "$removed_punctuation_mark\n";

Конечно, я мог бы сначала использовать re.search и group (), а затем re.sub, но мне пришлось бы повторить регулярное выражение, не очень элегантно.

1 Ответ

2 голосов
/ 26 февраля 2020

Как @jasonharper предложил в своем комментарии:

import re

replacements = []


def replacement(x):
    replacements.append(x.group(1))
    return ''


sentence = 'This is whatever. Foo'
new_sentence = re.sub(r'([\.,:;])', replacement, sentence)

print(new_sentence, replacements)

Это, вероятно, то, что вы ищете. x является объектом совпадения, поэтому он будет иметь все группы и другую информацию о совпадении - из него вы можете получить что угодно, пример захватывает первую группу, так как именно это имеет знак препинания в вашем регулярном выражении.

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