【问题标题】:Regex words with letters, numbers, optional special characters in any order带有字母、数字、任意顺序的可选特殊字符的正则表达式单词
【发布时间】:2018-12-17 05:52:54
【问题描述】:

我已经在这里使用了一段时间的帮助,但找不到任何特定于我的要求的内容。我需要选择包含至少 6 个字母和/或数字(组合,而不是每个)的完整单词,并带有可选的“特殊”字符。以任何顺序排列,如A1234512345A1-2-345-A12A45B 等等。

我做了一个小提琴here。我快到了(但可以做得更好) - 我无法弄清楚为什么需要至少 6 个数字才能匹配。是不是因为*的字母都是可选的

这是 VBA,所以无法查看后面的内容。特殊字符只会出现在匹配的“内部”,而不是开始或结束(例如,永远不会是 -1234-A-)。

【问题讨论】:

  • 我认为您可以拆分字符串并检查数组中的每个项目是否有 6 个字母/数字来构建结果数组/集合。实际上不需要正则表达式。
  • 你的小提琴使用[0-9-/]-/ 部分看起来很奇怪,regex101.com 抱怨/ An unescaped delimiter must be escaped with a backslash (\)。您能否验证一下这是否正确?
  • A12345CN 可以匹配为A1|2|3|4|5CN(其中| 用于解释如何)这就是为什么它被{5,} 拾取而不是{6,}

标签: regex vba


【解决方案1】:

我想这就是你要找的:

[a-z0-9/-]{6,}

这将匹配至少 6 个 a to z0 to 9-/ 的任何顺序。注意 - 位于字符类的末尾。您可以将它放在中间,但随后需要逃脱它。此外,如果您的分隔符也是/,则需要转义/

更新

正如 Wiktor 所指出的,这也会捕获 ------,这可能不是您想要的。我建议简单地清除所有可选字符,然后运行上面的正则表达式。我会删除我的答案,因为我没有提供确切的要求,但它是一个可行的解决方案,因此它可能有价值。

【讨论】:

  • [a-z0-9/-]{6,} 也将匹配 ---------------/----- 字符串。
  • @WiktorStribiżew 哎呀,你是对的!你从来没有从 StackOverflow 上抽过时间吗 :) 哈哈
  • 我知道正确的正则表达式答案,但它很难看。这里最好的方法是非正则表达式。
  • 我正在尝试一些愚蠢的解决方案,但一切都是一团糟。我同意正则表达式可能不是正确的选择。我认为只需去掉 optional 字符,然后一个不错的正则表达式就会很干净。
  • 好吧,那就小菜一碟了:)
【解决方案2】:

您可以进行正则表达式替换以删除所有非字母/数字,然后检查结果字符串的长度是否为 6 或更多:

Dim input As String = "A-1234-B"
Dim pattern As String = "[^A-Za-z0-9]+"
Dim replacement As String = ""
Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement)

Console.WriteLine(result.Length)   ' 6

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多