带有字母、数字、任意顺序的可选特殊字符的正则表达式单词

Posted

技术标签:

【中文标题】带有字母、数字、任意顺序的可选特殊字符的正则表达式单词【英文标题】: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, 【参考方案1】:

我想这就是你要找的:

[a-z0-9/-]6,

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

更新

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

【讨论】:

[a-z0-9/-]6, 也将匹配 ---------------/----- 字符串。 @WiktorStribiżew 哎呀,你是对的!你从来没有从 *** 上抽过时间吗 :) 哈哈 我知道正确的正则表达式答案,但它很难看。这里最好的方法是非正则表达式。 我正在尝试一些愚蠢的解决方案,但一切都是一团糟。我同意正则表达式可能不是正确的选择。我认为只需去掉 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

【讨论】:

以上是关于带有字母、数字、任意顺序的可选特殊字符的正则表达式单词的主要内容,如果未能解决你的问题,请参考以下文章

java正则表达式能不能不按顺序匹配?

正则表达式

正则表达式总结

正则表达式转义符

如何在 Python 中测试正则表达式密码?

正则表达式必须包含字母数字和特殊字符