正则表达式,用于匹配后面跟着一组空格的一组字母数字,使字符总数固定

本文关键字:一组 数字 字符 空格 正则表达式 用于 | 更新日期: 2023-09-27 18:12:13

我试图用c#/写一个正则表达式。匹配1-4个字母数字,后跟空格,后跟10个数字。问题是空格的数量加上字母数字的数量必须等于4,并且空格必须跟在字母数字后面,而不是穿插在一起。

我完全不知道该怎么做。我可以用^[A-Za-z'd's]{1,4}['d]{10}$,但这让空格落在前四个字符的任何地方。或者我可以使用^[A-Za-z'd]{1,4}['s]{0,3}['d]{10}$来保持空格在一起,但这将允许在10位数字之前超过四个字符。

有效:A12B1234567890 AB1 1234567890 AB 1234567890

无效:AB1 1234567890 (more than 4 characters before the numbers) A1B1234567890 (less than 4 characters before the numbers) A1 B1234567890 (space amidst the first 4 characters instead of at the end)

正则表达式,用于匹配后面跟着一组空格的一组字母数字,使字符总数固定

您可以使用后面查看(?<=^['p{L}'d's]{4})强制检查,以确保在10位数字之前有四个允许的字符:

^['p{L}'d]{1,4}'s{0,3}(?<=^['p{L}'d's]{4})'d{10}$
                      ^^^^^^^^^^^^^^^^^^^^  

看到演示

如果您不打算支持所有Unicode字母,只需将'p{L}替换为[a-z]并使用RegexOptions.IgnoreCase

这是你需要的正则表达式:

^(?=[A-Za-z0-9 ]{4}'d{10}$)[A-Za-z0-9]{1,4} *'d{10}$

它使用前瞻性(?= )来测试它后面是否跟着4个字符,无论是整数还是空格,然后它返回到它所在的位置(字符串的开始,不消耗任何字符)。

一旦满足了这个条件,剩下的就是一个非常类似于您尝试的表达式([A-Za-z0-9]{1,4} *'d{10})。

在线测试仪

我知道这是愚蠢的,但必须完全按照要求工作。

^[A-Za-z'd]([A-Za-z'd]{3}|[A-Za-z'd]{2}'s|[A-Za-z'd]'s{2}|'s{3})['d]{10}$

不知道你在找什么,但也许:

^(?=.{14}$)[A-Za-z0-9]{1,4} *'d{10}
演示

试试这个:

不允许字符/空格/字符组合,以字符开头:

/'b(?!'w's{1,2}'w+)'w('w|'s){3}'d{10}/gm
https://regex101.com/r/fF2tR8/2