Доступ к нескольким захватам одной группы захвата в строке подстановки - PullRequest
0 голосов
/ 13 декабря 2018

Предположим, у меня есть регулярное выражение (\d)+.В .Net я могу получить доступ ко всем захватам этой группы захвата, используя match.Groups [1] .Captures.

Могу ли я также получить доступ к этим захватам в строке подстановки?

Так, например, длявходная строка 523, мне нужно использовать 5, 2 и 3 в моей строке подстановки (а не только 3, что составляет $ 1).

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Если вы намереваетесь захватить цифры, каждая из которых находится в отдельной группе захвата, вам нужно создать отдельные группы захвата для каждой цифры, например:

(\d)(\d)(\d)

ПРИМЕЧАНИЕ : Этоне очень хорошо масштабируется, и вы не можете сопоставить числа любой другой длины, кроме 3 цифр.Другими словами, нет математики в 23 или 345667!

Хорошую страницу с длинным и подробным объяснением, почему это нельзя сделать как (\d)+, можно найти здесь: https://www.regular -expressions.info / captureall.html

Так что, если это действительно то, что вам нужно, вам нужно создать свой собственный цикл, который ищет строку для каждой цифры отдельно.


Если вам, с другой стороны, нужно записать номер, а не отдельные цифры, вы просто ставите знак + в неправильном положении.Я думаю, что вы должны написать:

(\d+)
0 голосов
/ 13 декабря 2018

Я думаю, что ОП хочет получить каждое совпадение из одной цифры отдельно.Возможно, тогда вам это поможет:

<!-- language: lang-vb -->

' Create a list to put the resulting matches in
Dim ResultList As StringCollection = New StringCollection()
Dim RegexObj As New Regex("(\d)")
Dim MatchResult As Match = RegexObj.Match(strName)
While MatchResult.Success
    ResultList.Add(MatchResult.Groups(1).Value)
    ' Console.WriteLine(MatchResult.Groups(1).Value)
    MatchResult = MatchResult.NextMatch()
End While
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...