正则表达式,用于匹配后面跟着一组空格的一组字母数字,使字符总数固定
本文关键字:一组 数字 字符 空格 正则表达式 用于 | 更新日期: 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