目标:为较大字符串中的固定长度字符串制作广义正则表达式。此字符串具有指定的填充字符,后跟一个递增的整数计数器。理想情况下,会有一些方法可以说,"我希望这个组的长度为10,并且只包含一种类型的字符,后跟不同的字符。"
我想在可变数据中匹配这个(可能是数字可能是字母可能是符号): 填充字符+数字加起来指定长度,这里是5.
这些是允许的填充+数字组合。
$$$$1
$$$12
$$123
$1234
以下是一个例子:
<variable-data> <padding-characters> <numbers> <variable-data>
............... .................... ddddddddd ...............
(where periods are any characters and 'd' is any digit)
Example Data:
ABC $$$$ 1 $!@
Example Regex:
ABC\$*\d+\$!@
Match:
ABC$$$$1$!@
ABC$$$12$!@
ABC$$123$!@
ABC$1234$!@
ABC12345$!@
No Match:
ABC$$123456789$!@
ABC1$2$34$!@
我尝试过的事情:
ABC(?=.{5})\$*\d+\$!@
这不起作用,因为\d+
因为它仍匹配到下一个数字。我尝试的另一件事是
ABC(?=[\$\d]{5}[^\$\d])(\$*\d+)\$!@
其中的目的是停止遇到非数字或非$,但这没有用,因为字符串COULD的下一部分以$或数字开头。
解决此问题的最简单的正则表达式:
(\$\$\$\$\d|\$\$\$\d\d|\$\$\d\d\d|\$\d\d\d\d|\d\d\d\d\d)
但是我试图让这更加普遍,并且可以有不同数量的填充E.G.
$$$$$$$$$1
$$$$$$$$12
...
答案 0 :(得分:3)
你可以向前看,检查你在接下来的5个字符的范围内没有倒置的填充字符和数字序列,然后需要并捕获5个只有数字和填充字符的字符:
ABC(?!.{0,3}\d\$)([\$\d]{5})\$!@
如果您需要至少一个数字,那么:
答案 1 :(得分:2)
ABC(?=.{5}\$!@)\$*\d+\$!@
这与您的第一次尝试非常相似,但稍有不同,前瞻也包含终止字符串。这给了它固定的东西,以确保正则表达式不再匹配任何东西。