#python #regex #replace
#python #регулярное выражение #заменить
Вопрос:
Я пытаюсь добавить двойные кавычки вокруг слов только в фигурных скобках.
Ввод:
{Cat}
{Cow Pig}
{Cat,Dog}
cat dog fish
Ожидаемый результат:
{"Cat"}
{"Cow Pig"}
{"Cat","Dog"}
cat dog fish
Должны быть затронуты только слова внутри фигурных скобок, и слова могут содержать пробелы, разделенные только запятой.
Это то, что я пробовал, что почти работает, но не захватывает группу 2 (слова) отдельно друг от друга.
({)([a-zA-z|s|,] ?)(})
Replace with :
{"2"}
ДЕМОНСТРАЦИЯ:
https://regex101.com/r/FYBOiO/1
Спасибо!
Ответ №1:
Вы можете сопоставить все строки, в которые хотите заключить слова в двойные кавычки, используя {([ws,] )}
регулярное выражение, а затем обернуть слова отдельным символом re.sub
:
import re
r = r'{([ws,] )}'
s = "{Cat}n{Cow Pig}n{Cat,Dog}ncat dog fish"
print( re.sub(r, lambda x: "{{{}}}".format(re.sub(r'w ', r'"g<0>"', x.group(1))), s) )
Смотрите демонстрацию Python
Вывод:
{"Cat"}
{"Cow" "Pig"}
{"Cat","Dog"}
cat dog fish
Основным регулярным выражением для извлечения является {([ws,] )}
(demo {s*(w (?:s*(?:,s*)?w )*)s*}
), но вы можете уточнить его как (см. Эту демонстрацию регулярных выражений).
Подробные сведения
{
—{
символ([ws,] )
— Группа 1: одно или несколько слов, пробелов или,
символов}
—}
символ
Регулярное выражение 2
{s*
—{
и 0 пробелов(w (?:s*(?:,s*)?w )*)
— Группа 1:w
— 1 или более символов word(?:s*(?:,s*)?w )*
— 0 или более повторенийs*
— 0 пробелов(?:,s*)?
— необязательная последовательность,
и 0 пробеловw
— символы 1 word
s*}
— 0 пробелов и}