Regex: добавление кавычек вокруг слов только в фигурных скобках - PullRequest
2 голосов
/ 12 апреля 2019

Я пытаюсь добавить двойные кавычки вокруг слов только в фигурных скобках.

Ввод:

{Cat}
{Cow Pig}
{Cat,Dog}
cat dog fish

Ожидаемый вывод:

{"Cat"}
{"Cow Pig"}
{"Cat","Dog"}
cat dog fish

Только слова внутри фигурныхфигурные скобки должны быть затронуты, и слова могут иметь пробелы, только разделенные запятой.

Это то, что я пробовал, это почти работает, но не захватывает группу 2 (слова) отдельно друг от друга.

({)([a-zA-z|\s|,]+?)(})
Replace with :
{"\2"}

DEMO: https://regex101.com/r/FYBOiO/1

Спасибо!

1 Ответ

1 голос
/ 12 апреля 2019

Вы можете сопоставить все строки, в которых вы хотите заключить слова, в двойные кавычки, используя {([\w\s,]+)} regex, а затем обернуть слова отдельной re.sub:

import re
r = r'{([\w\s,]+)}'
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

Основное регулярное выражение для извлечения: {([\w\s,]+)} ( demo ), но вы можете указать его как {\s*(\w+(?:\s*(?:,\s*)?\w+)*)\s*} (см. это демонстрационное выражение regex ).

Детали

  • { - { char
  • ([\w\s,]+) - Группа 1: одно или несколько слов, пробелов или , символов
  • } - } char

Regex 2

  • {\s* - { и 0+ пробелов
  • (\w+(?:\s*(?:,\s*)?\w+)*) - Группа 1:
    • \w+ - 1 или более символов слова
    • (?:\s*(?:,\s*)?\w+)* - 0 или более повторений
      • \s* - 0+ пробелов
      • (?:,\s*)? - необязательная последовательность , и 0+ пробелов
      • \w+ - 1+ слово символов
  • \s*} - 0+ пробелов и }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...