访问替换字符串中一个捕获组的多个捕获

时间:2018-12-13 14:35:13

标签: regex

假设我有正则表达式var data = { "Italy": { "Milan": ["shop123"], "Rome": ["shop2"] }, "USA": { "Los Angeles": ["shopXY"] } } 。 在.Net中,我可以使用match.Groups [1] .Captures访问该捕获组的所有捕获。

我也可以通过替换字符串访问这些捕获吗?

例如,对于输入字符串(\d)+,我需要在替换字符串中使用5、2和3(而不仅仅是3,即$ 1)。

2 个答案:

答案 0 :(得分:1)

如果您打算在单独的捕获组中捕获每个数字,则实际上需要为每个数字创建一个单独的捕获组,如下所示:

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

注意:这不能很好地扩展,并且您不能匹配3位数以外的任何其他长度的数字。换句话说,23345667上都没有数学!

可以在下面找到一个很好的页面,其中详尽而详尽地解释了为什么不能像(\d)+那样完成: https://www.regular-expressions.info/captureall.html

因此,如果这确实是您想要的,则需要制作自己的循环,以分别在字符串中搜索每个数字。


另一方面,如果您需要捕获数字而不是单个数字,则只需将+标记放在错误的位置即可。我想你应该写:

(\d+)

答案 1 :(得分:0)

我认为OP希望分别获得每个数字匹配。 也许这对您有帮助:

<!-- 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