Как заменить разные подходящие группы другим текстом в Regex - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть следующий текст:

dangernounC2
cautionnounC2
alertverbC1
dangerousadjectiveB1

Что мне нужно в качестве вывода:

danger (n)
caution (n)
alert (v)
dangerous (adj)

Я бы знал, как это сделать, если список, например, все существительные или все глаголы et c., но есть ли способ заменить каждую соответствующую группу другим соответствующим текстом?

1 Ответ

1 голос
/ 18 апреля 2020

Вот регулярное выражение, которое будет работать для вас. Но это уловка, которая работает только потому, что эта подстановка является частью совпадения.

Регулярное выражение

(n)ounC2|(v)erbC1|(adj)ectiveB1

Подстановка

 ($1$2$3)

Используйте (\1\2\3) вместо этого, если вы используете Python

Пояснение

(n)ounC2|(v)erbC1|(adj)ectiveB1 будет соответствовать либо nounC2, verbC1 или adjectiveB1

Когда он соответствует nounC2, группа 1 будет содержать n, группа 2 и 3 ничего не содержат
Когда она соответствует verbC1, группа 2 будет содержать v, группы 1 и 3 ничего не будут содержать
Когда совпадения будут adjectiveB1, группа 3 будет содержать adj, группа 1 и 2 не будут содержать ничего

Каждое совпадение заменяется пробелом за которыми следуют значения 3 групп в скобках.

Демонстрации

Демонстрация RegEx101

Фрагмент кода (JavaScript)

const regex = /(n)ounC2|(v)erbC1|(adj)ectiveB1/gm;
const str = `
dangernounC2
cautionnounC2
alertverbC1
dangerousadjectiveB1
eatverbC1
prettyadjectiveB1`;
const subst = ` ($1$2$3)`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);
...