【发布时间】:2021-09-03 04:11:51
【问题描述】:
问题
在http://regex101.com,据说'$ 将返回匹配后的源字符串的一部分。然而它对我来说不是这样。
示例
例如,我需要替换 JSON 中的文本。我需要在某些参数之后从 JSON 中删除一些文本。
"ReportPackage": {
"$id": "some id",
"$type": "stuff",
"ConnectionString": "REPLACE_HERE",
"FtpConfiguration": {
"$id": "some id",
"$type": "some type",
"Address": "some adress",
"Password": "REPLACE_HERE",
"Username": "REPLACE_HERE",
"BaseDirectory": "some path"
},
"PgConnectionString": "REPLACE_HERE"
}
},
"CurrentFederation": "",
"CurrentVirtualHost": "/",
"PgConnectionString": "REPLACE_HERE",
"PeriodicContinuationActivated": true
我需要替换标记为REPLACE_HERE的值。我可以使用四个单独的正则表达式,但我想使用一个(如果可能的话)。
我解决问题的尝试
我使用这个正则表达式$'((("Password")|("ConnectionString")|("PgConnectionString")|("Username")))(.*),,但它并没有像我想象的那样工作。我做错了什么?
【问题讨论】:
-
为什么不直接使用现有的解析器解析 json?比使用正则表达式更容易。
-
您误解了.NET regex reference。其实应该用在替换模式中,见“
$'在替换字符串中包含匹配后输入字符串的所有文本” -
这是否意味着我应该创建类,然后在我创建的类中反序列化,然后更改必要的值,然后反序列化它。是不是容易多了?
-
您不能使用正则表达式安全地或没有假设来操作JSON字符串。有了假设,你可以试试
Regex.Replace(text, @"(?m)^(\s*""(?:Password|ConnectionString|PgConnectionString|Username)""\s*:\s*"")[^""]+", "$1")。 -
不,这不是更容易或更难的问题。确保更换始终可靠是一个问题。如果
"$type": "some text that that matches your regex",你会有问题。