Python 正则表达式:仅在大括号内的单词周围添加引号

Python 正则表达式:仅在大括号内的单词周围添加引号,python,regex,replace,Python,Regex,Replace,我试图在单词周围加上双引号,只在大括号内 输入: {Cat} {Cow Pig} {Cat,Dog} cat dog fish 预期产出: {"Cat"} {"Cow Pig"} {"Cat","Dog"} cat dog fish 只有大括号内的单词才受影响,单词可以有空格,只能用逗号分隔 这就是我尝试过的方法,它几乎可以工作,但不能单独捕获第2组(单词) ({)([a-zA-z|\s|,]+?)(}) Replace with : {"\2"} 演示: 谢谢 您可以使用{([\w\s

我试图在单词周围加上双引号,只在大括号内

输入:

{Cat}
{Cow Pig}
{Cat,Dog}
cat dog fish
预期产出:

{"Cat"}
{"Cow Pig"}
{"Cat","Dog"}
cat dog fish
只有大括号内的单词才受影响,单词可以有空格,只能用逗号分隔

这就是我尝试过的方法,它几乎可以工作,但不能单独捕获第2组(单词)

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


谢谢

您可以使用
{([\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) )
主要的提取正则表达式是
{([\w\s,]+)}
(),但您可以将其精确为
{\s*(\w+(?:\s*(?:,\s*)?\w+)\s*}
(请参阅)

详细信息

  • {
    -a
    {
    字符
  • ([\w\s,]+)
    -第1组:一个或多个单词、空格或
    字符
  • }
    -a
    }
    字符
Regex 2

  • {\s*
    -
    {
    和0+空格
  • (\w+(?:\s*(?:,\s*)?\w+*)
    -第1组:
    • \w+
      -1个或多个单词字符
    • (?:\s*(?:,\s*)?\w+*
      -0次或多次重复
      • \s*
        -0+空格
      • (?:,\s*)?
        -可选的
        和0+空格序列
      • \w+
        -1+字字符
  • \s*}
    -0+空格和
    }
{"Cat"}
{"Cow" "Pig"}
{"Cat","Dog"}
cat dog fish