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

Regular Expression to match a group of alphanumerics followed by a group of spaces, making a fixed total of characters

我正在尝试使用 C#/.Net 编写正则表达式,匹配 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)

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

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

它使用 lookahead (?= ) 来测试它后面是否有 4 个字符,alnum 或 space,然后它回到原来的位置(字符串的开头,不消耗任何字符)。

一旦满足该条件,剩下的就是与您尝试的非常相似的表达式 ([A-Za-z0-9]{1,4} *\d{10})。

Online tester

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

^[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}$

您可以强制执行回溯检查 (?<=^[\p{L}\d\s]{4}) 以确保在 10 位数字之前有四个允许的字符:

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

demo

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

不确定您在寻找什么,但也许:

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

demo

试试这个:

不允许 char/space/char 组合并以字符开头:

/\b(?!\w\s{1,2}\w+)\w(\w|\s){3}\d{10}/gm

https://regex101.com/r/fF2tR8/2