带有字母、数字、任意顺序的可选特殊字符的正则表达式单词
Posted
技术标签:
【中文标题】带有字母、数字、任意顺序的可选特殊字符的正则表达式单词【英文标题】:Regex words with letters, numbers, optional special characters in any order 【发布时间】:2018-12-17 05:52:54 【问题描述】:我已经在这里使用了一段时间的帮助,但找不到任何特定于我的要求的内容。我需要选择包含至少 6 个字母和/或数字(组合,而不是每个)的完整单词,并带有可选的“特殊”字符。以任何顺序排列,如A12345
、12345A
、1-2-345-A
、12A45B
等等。
我做了一个小提琴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 z
或 0 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
【讨论】:
以上是关于带有字母、数字、任意顺序的可选特殊字符的正则表达式单词的主要内容,如果未能解决你的问题,请参考以下文章