我用下面的空字符串替换字符 {
、 }
、 :
、 ,
:
此代码:
s = "\":{},"
print(s)
print(re.sub(r'\"|{|}' , "",s))
印刷品:
":{},
:,
这是预期的。
我正在尝试修改正则表达式以忽略开括号和闭括号之间的所有内容。因此对于字符串 "\":{},[test,test2]"
只应返回 :,[test,test2]
。
如何修改正则表达式,使正则表达式不应用 [
和 ]
之间包含的数据。
我尝试使用:
s = "\":{},[test1, test2]"
print(s)
print(re.sub(r'[^a-zA-Z {}]+\"|{|}' , "",s))
(来源:How to let regex ignore everything between brackets?)
没有任何 ,
值被替换。
答案 0 :(得分:2)
假设您的括号是平衡/未转义的,您可以使用带有 negative lookahead 的正则表达式来断言匹配的字符不在 [...]
内:
>>> import re
>>> s = "\":{},[test1,test2]"
>>> print (re.sub(r'[{}",](?![^[]*\])', '', s))
:[test1,test2]
正则表达式详情:
[{}",]
:匹配 [...]
中的其中一个字符(?![^[]*\])
:否定前瞻断言我们没有 ]
前面没有匹配任何 [
之间,换句话说匹配的字符不在 {{1} 内}答案 1 :(得分:1)
如果要删除不在方括号内的{
、}
、,
和"
,可以使用
re.sub(r'(\[[^][]*])|[{}",]', r'\1', s)
参见regex demo。请注意,您可以向字符集 [{}"]
添加更多字符。如果需要添加连字符,请确保它是字符集中的最后一个字符。转义 \
、]
(如果不是第一个,就在 [
之后)和 ^
(如果它在第一个,就在 [
之后)。
详情:
(\[[^][]*])
- 捕获组 1:一个 [...]
子串|
- 或[{}",]
- {
、}
、,
或 "
字符。使用您的示例输入查看 Python demo:
import re
s = "\":{},[test1, test2]"
print( re.sub(r'(\[[^][]*])|[{}",]', r'\1', s) )
## => :[test1, test2]