我试图在花括号内围绕单词添加双引号。
输入:
{Cat}
{Cow Pig}
{Cat,Dog}
cat dog fish
预期产量:
{"Cat"}
{"Cow Pig"}
{"Cat","Dog"}
cat dog fish
只有花括号内的单词才会受到影响,单词可以有空格,只能用逗号分隔。
这就是我所尝试过的,它几乎可以工作,但不会捕获彼此分开的第2组(单词)。
({)([a-zA-z|\s|,]+?)(})
Replace with :
{"\2"}
但是:ぁzxswい
谢谢!
您可以使用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*}
)。
细节
{
字符正则表达式2
{
- ([\w\s,]+)
和0+空格,
- 第1组:
}
- 1个或更多单词字符
}
- 重复0次或更多次
{\s*
- 0+空格
{
- (\w+(?:\s*(?:,\s*)?\w+)*)
和0+空格的可选序列
\w+
- 1个字的字符(?:\s*(?:,\s*)?\w+)*
- 0+空格和\s*