Соответствие вхождения в строке с регулярным выражением для замены значения? - PullRequest
1 голос
/ 20 октября 2019

Я потратил некоторое время на эту проблему, но действительно нуждаюсь в помощи от гуру регулярных выражений.

Пока у меня есть следующее, что не совсем дает мне то, что мне нужно.

[. *?] \ s [=> <] + \ s [@] \ w + </p>

Из следующей строки примера мне нужны все вхождения поля, за которым следует параметр \ variable. Параметр начинается с'@'.

. Затем я собираюсь использовать результат для замены содержимого каждого значения в .net.

Следовательно, выражение регулярного выражения будет соответствовать

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

Примечание [System.State] = 'Закрыто' не соответствует.

Пример строки

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 голосов
/ 21 октября 2019

Я предполагаю, что, возможно, вы пытаетесь написать какое-то похожее выражение для:

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

и заменить его на строку, похожую на:

[new_value] $2 $3

Я добавил несколькозахватывая группы, не был уверен в желаемом выводе, вы можете просто удалить или изменить их, если / как хотите.

Демонстрация

Тест

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 . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

0 голосов
/ 21 октября 2019

Это регулярное выражение должно делать то, что вы хотите:

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

Основное изменение заключается в том, что [ и ] в начальной части вашего регулярного выражения необходимо экранировать. Я также добавил группы захвата для сбора имени поля (группа 1) и значения параметра (группа 2).

Демонстрация по регулярному выражению regex101

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...