【问题标题】:Regex: adding quotes around words only within curly braces正则表达式:仅在大括号内为单词添加引号
【发布时间】:2019-04-12 08:47:52
【问题描述】:

我正在尝试仅在大括号内的单词周围添加双引号。

输入:

{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

谢谢!

【问题讨论】:

    标签: python regex replace


    【解决方案1】:

    您可以使用{([\w\s,]+)} 正则表达式匹配所有要用双引号括起来的字符串,然后用单独的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 demo

    输出:

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

    主要的提取正则表达式是{([\w\s,]+)}demo),但您可以将其精确为{\s*(\w+(?:\s*(?:,\s*)?\w+)*)\s*}(参见this regex demo)。

    详情

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

    正则表达式 2

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 2021-03-03
      • 1970-01-01
      相关资源
      最近更新 更多