用正则表达式匹配字符串中出现的值以进行替换?

时间:2019-10-20 20:49:26

标签: c# .net regex

我花了一些时间解决这个问题,但确实需要正则表达式专家的帮助。

到目前为止,我有以下内容并不能完全满足我的需求。

[。*?] \ s [=> <] + \ s [@] \ w +

从下面的示例字符串中,我需要所有出现的字段,后跟一个参数\变量。参数以“ @”开头。

然后我将使用结果替换.net中每个值的内容。

因此,正则表达式将匹配

[System.TeamProject] = @project
[Microsoft.VSTS.Common.ClosedDate] >= @startOfDay
[Microsoft.VSTS.Common.ClosedDate] >= @startOfDay

注意[System.State] ='Closed'不匹配。

示例字符串

select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] from WorkItems where [System.TeamProject] = @project and [Microsoft.VSTS.Common.ClosedDate] >= @startOfDay and [System.State] = 'Closed' and [Microsoft.VSTS.Common.ClosedDate] >= @startOfDay

感谢堆!

2 个答案:

答案 0 :(得分:0)

此正则表达式应执行您想要的操作:

\[([^]]*)]\s+[><=]+\s+(\@\w+)

主要变化是需要对正则表达式初始部分的[]进行转义。我还添加了捕获组以收集字段名称(组1)和参数值(组2)。

Demo on regex101

答案 1 :(得分:0)

我的猜测是,也许您正在尝试编写类似于以下内容的表达式:

\[([^\]]*)\]\s*(=|>=|<=)\s*(@\w+)

并替换为类似于以下内容的字符串:

[new_value] $2 $3

我添加了一些捕获组,不确定所需的输出,您可以根据需要简单地删除或修改这些捕获组。

Demo

测试

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"\[([^\]]*)\]\s*(=|>=|<=)\s*(@\w+)";
        string substitution = @"[new_value] $2 $3";
        string input = @"select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] from WorkItems where [System.TeamProject] = @project and [Microsoft.VSTS.Common.ClosedDate] >= @startOfDay and [System.State] = 'Closed' and [Microsoft.VSTS.Common.ClosedDate] >= @startOfDay

Note [System.State] = 'Closed' is not matched.";
        RegexOptions options = RegexOptions.Multiline;

        Regex regex = new Regex(pattern, options);
        string result = regex.Replace(input, substitution);
    }
}

如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

jex.im可视化正则表达式:

enter image description here