【发布时间】:2016-04-23 12:25:10
【问题描述】:
我需要正则表达式
允许 a-z、A-Z、0-9。
固定为 20 个字符。
开头或中间的空格不允许。
末尾有空格允许。
例子:
12345678901234567890 [Match]
1234567890 [Match]
abcde12345 [Match]
abcdefg [Not match]
ab cdefg [Not match]
我使用这个正则表达式,它工作得很好,但它真的很长而且很难维护。
[a-zA-Z0-9]{20}|[a-zA-Z0-9]{19}\s{1}|[a-zA-Z0-9]{18}\s{2}
|[a-zA-Z0-9]{17}\s{3}|[a-zA-Z0-9]{16}\s{4}|[a-zA-Z0-9]{15}\s{5}
|[a-zA-Z0-9]{14}\s{6}|[a-zA-Z0-9]{13}\s{7}|[a-zA-Z0-9]{12}\s{8}
|[a-zA-Z0-9]{11}\s{9}|[a-zA-Z0-9]{10}\s{10}|[a-zA-Z0-9]{9}\s{11}
|[a-zA-Z0-9]{8}\s{12}|[a-zA-Z0-9]{7}\s{13}|[a-zA-Z0-9]{6}\s{14}
|[a-zA-Z0-9]{5}\s{15}|[a-zA-Z0-9]{4}\s{16}|[a-zA-Z0-9]{3}\s{17}
|[a-zA-Z0-9]{2}\s{18}|[a-zA-Z0-9]{1}\s{19}|\s{20}
请帮忙,谢谢。
更新。
实际上我需要检查很长的字符串。
起初,在我问这个问题之前,我的正则表达式看起来像这样(第一个正则表达式)
^[\s\d]{25}\d{6}[0-1]{1}\d{24}[\!\@\#\$\%\^\&\*\(\)\-\\_\=\+\/\,\?\<\>\;\:\"\'\w\s\.]{30}(\s{3}|\d{3})(\s{4}|\d{4})[\s|00|10|20|40]{2}[a-zA-Z0-9\s]{20}[\s\w\d]{0,32}$
在我提出问题后,我的正则表达式看起来像这样(第二个正则表达式)
^[\s\d]{25}\d{6}[0-1]{1}\d{24}[\!\@\#\$\%\^\&\*\(\)\-\\_\=\+\/\,\?\<\>\;\:\"\'\w\s\.]{30}(\s{3}|\d{3})(\s{4}|\d{4})[\s|00|10|20|40]{2}(?=.{20})[a-zA-Z0-9]*\s*[\s]{0,32}$
假设我将这个正则表达式分成 3 部分。
Part1:[\s\d]{25}\d{6}[0-1]{1}\d{24}[\!\@\#\$\%\^\&\*\(\)\-\\_\=\+\/\,\?\<\>\;\:\"\'\w\s\.]{30}(\s{3}|\d{3})(\s{4}|\d{4})[\s|00|10|20|40]{2}
Part2:[a-zA-Z0-9\s]{20} changed to (?=.{20})[a-zA-Z0-9]*\s*
Part3:[\s\w\d]{0,32}
第 1 部分工作正常。
第 2 部分要求已更改,因此我将其更改为 "(?=.{20}$)[a-zA-Z0-9]*\s*"
Part3 是我更改 part2 时的问题。
示例
00202510027680 1901160000000000000000000007000Test Test 009 069 aaaaaaaaaaaaaaaaaaaa
字符串以 32 个空格结尾。 如果我再添加 1 个空格,第一个正则表达式不匹配。但是第二个正则表达式匹配。正确的是不匹配。
如何修改第 2 部分(或第 3 部分)以满足要求。谢谢。
【问题讨论】:
-
您在 .NET 中使用正则表达式,并在不支持 .NET 正则表达式语法的网站上对其进行测试。这是一个适用于您的 .NET 正则表达式:
@"^[\s\d]{25}\d{6}[01]\d{24}[-!@#$%^&*()\\_=+/,?<>;:""'\w\s.]{30}(\s{3}|\d{3})(\s{4}|\d{4})(\s|00|10|20|40){2}[a-zA-Z0-9\s]{20}(?<=[a-zA-Z0-9]{0,20}\s*)[\s\w\d]{0,32}$"。请测试并让我知道它是否适合您。请注意,[\s|00|10|20|40]{2}匹配 2 个字符:空格或0、1、2或4。如果您需要匹配 2 个空格,或者两个00s,或者两个10s 等,您需要使用(...)(参见我的模式)。 -
我认为它几乎可以工作,但在'aaaaaaaaaaaaaaaaaa'的开头或中间不能有任何空间,只允许在结尾。
-
@WiktorStribiżew 请帮忙,谢谢
-
我需要访问我的桌面进行检查。该技术是使用后视来强加额外的检查。恐怕燕麦变得太难以维护了。