【问题标题】:Can I use a variable in my RegEx pattern?我可以在 RegEx 模式中使用变量吗?
【发布时间】:2014-02-16 15:59:18
【问题描述】:

("/gallery/static/newest/\d*/desc/\d*/nosets/19/")

有效....

("/gallery/static/newest/\d*/desc/\d*/nosets/" & strAge & "/")

没用……

如何让我的 RegEx 模式与变量一起使用?还是不能?

【问题讨论】:

  • 你应该可以做到这一点。你确定 strAge 在这个例子中是“19”的字符串吗?您可以调试打印连接的字符串吗?或者使用中间变量并逐步调试。
  • 如果strAge的值不能保证是一个简单的数字记得转义输入见RegEx.Escape
  • 是的,我测试了它,但不起作用。我希望有其他选择。根据我的经验,您无法将模式分解为带有变量的部分。
  • 院长,strAge 只是一个数字。我可以使用 Cint 并变成一个整数,但无论如何它都会失败。我会调查 RegEx.Escape。谢谢。
  • & 和 + 运算符也不能使用它。我确实注意到,如果我使用 Cint 将 strAge 转换为整数,它确实有效。现在的问题是它们不仅仅是一个数字。可能是 18,19。这就是为什么我把它作为一个字符串。我可以使用 RegEx.Split 但这只会让它更加混乱。我很好地挖掘了所有模式的硬编码。

标签: regex vb.net variables


【解决方案1】:

正如 Karl Kieninger 所建议的,您似乎有可能在 strAge 中有额外的字符。你可以删除那些。根据 sln 的想法开发,一旦你有一个干净的字符串,你可以将 ,s 更改为 |s:

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()
        Dim textToCheck As String = "/gallery/static/newest/123/desc/456/nosets/20/"

        Dim strAge As String = "18,19,20,21"
        ' remove any unwanted chars and change the ","s to "|"s.
        strAge = Regex.Replace(strAge, "[^0-9,]", "").Replace(","c, "|"c)
        Dim pattern As String = "/gallery/static/newest/\d*/desc/\d*/nosets/(?:" & strAge & ")/"
        Console.WriteLine(pattern)
        Console.WriteLine(textToCheck & " " & Regex.IsMatch(textToCheck, pattern).ToString)

        Console.ReadLine()

    End Sub

End Module

输出:

/gallery/static/newest/\d*/desc/\d*/nosets/(?:18|19|20|21)/
/gallery/static/newest/123/desc/456/nosets/20/ True

另外,你的意思是\d*次或多次出现)还是\d+一次或多次出现)更好?

【讨论】:

  • 我使用 \d* 因为数字可能是 10 或 97395。它们是随机数。此外, strAge 可能是 20 没有额外的字符,但它仍然不起作用。只有当我硬编码时。我已经将 strAge 用作 18,19,20,因为这就是 url 希望它的格式。如果我硬编码它就可以了。但作为一个变量,它没有。感谢您的解决方案。
  • @user3316318 在这种情况下看起来\d+ 会更好,因为\d* 意味着它也可以匹配no 位。您是说希望 URL 包含逗号,还是用逗号分隔可能匹配的不同数字?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2019-12-13
相关资源
最近更新 更多