我试图仅在大括号内在单词周围添加双引号。
输入:
{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
谢谢!
答案 0 :(得分: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 +空格和}