我试图在大括号内的单词周围添加双引号。
输入:
{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+ 个空格和}
