Skip to main content
 首页 » 编程设计

python之正则表达式:仅在花括号内为单词添加引号

2024年11月24日31dudu

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

输入:

{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

谢谢!

请您参考如下方法:

您可以使用 {([\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+ 个空格和 }