[英]Regex for fix length string which allow space(s) at end only. C#
我需要正則表達式
AZ,AZ,允許0-9。
固定為20個字符。
開頭或中間不允許有空格。
空間(S)在最后允許的 。
例:
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}
第一部分工作正常。
第2部分的要求已更改,因此我將其更改為“(?=。{20} $)[a-zA-Z0-9] * \\ s *”
當我更改第2部分時,第3部分就是問題。
例
00202510027680 1901160000000000000000000007000Test Test 009 069 aaaaaaaaaaaaaaaaaaaa
字符串以32個空格結尾。 如果我再增加1個空間,則第一個正則表達式將不匹配。 但是第二個正則表達式匹配。 正確的是不匹配的。
我如何修改part2(或part3)以滿足要求。 謝謝。
您可以使用
^(?=.{20}$)[a-zA-Z0-9]*\s*$
在此表達式中,使用正前瞻(?=.{20}$)
強制執行20個字符的長度。 由於匹配模式僅匹配AZ,az和0-9,因此.
在前瞻中是可能的。
正則表達式說明 :
^
-字符串的開頭 (?=.{20}$)
-字符串長度必須為20個字符 [a-zA-Z0-9]*
-零個或多個字母或數字(可以使用a +
代替*
) \\s*
-零個或多個空格 $
-字符串結尾 C#:
var reg = @"^(?=.{20}$)[a-zA-Z0-9]*\s*$";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.