2016-01-18 20 views
1

我需要的正則表達式這修正長度字符串的正則表達式,只允許在末尾留出空間。 C#

  1. A-Z,A-Z,0-9允許的。

  2. 固定爲20個字符。

  3. 空間在開始或中間不允許

  4. 最後的空間允許

例子:

123456789[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} 

請幫忙,謝謝。


UPDATE

事實上,我需要檢查很長的字符串。

起初,我問這個問題之前,我的正則表達式是這個樣子(1正則表達式)

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

Part1工作正常。

第2部分的要求被改變,所以我將其改爲「(?= {20} $)[A-ZA-Z0-9] * \ S *」

第三部分是問題時我改變part2。

00202510027680   1901160000000000000000000007000Test Test 009     069  aaaaaaaaaaaaaaaaaaaa         

字符串結束與32米的空間。 如果我再添加1個空格,第一個正則表達式不匹配。但是第二次正則表達式匹配。正確的不匹配。

如何修改part2(或part3)以符合要求。謝謝。

demo for 1st regex

demo for 2nd regex

+0

您正在使用.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} $「'](http://goo.gl/TQV2S4)。請測試並讓我知道它是否適合您。請注意,'[\ s | 00 | 10 | 20 | 40] {2}'匹配2個字符:空格或'0','1','2'或'4'。如果你需要匹配兩個空格,或兩個'00's或兩個'10's等,你需要使用'(...)'(參見我的模式)。 –

+0

我認爲它幾乎可行,但在'aaaaaaaaaaaaaaaaaaaa'不能在開頭或中間有任何空間,只允許在最後。 – TaeV

+0

@WiktorStribiżew請幫助,謝謝 – TaeV

回答

5

可以使用

^(?=.{20}$)[a-zA-Z0-9]*\s*$ 

參見regex demo

在該表達式中,爲20個字符的長度被強制與正超前(?=.{20}$)。由於匹配模式只與A-Z,a-z和0-9匹配,因此預見中的.是可能的。

正則表達式的解釋

  • ^ - 串
  • (?=.{20}$)開始 - 字符串必須是20個字符長
  • [a-zA-Z0-9]* - 零個或多個字母或數字(一+可以用來代替*
  • \s* - 零個或多個空格
  • $ - 字符串的結尾

C#:

var reg = @"^(?=.{20}$)[a-zA-Z0-9]*\s*$"; 
+0

非常感謝你@WiktorStribiżew,我認爲它的工作非常完美。但事實上,我需要檢查很長的字符串。我已經使用你的答案作爲我的完全正則表達式的一部分。我的正則表達式看起來像這樣 [\ 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 \ w \。] {32}這樣的東西。我該怎麼做? – TaeV

+0

請提供一個示例字符串。因爲你正在使用字符類而不是分組(這裏:[00 | 10 | 20 | 40] {2}')。 –

+0

第一個字符串「00202510027680 1901160000000000000000000007000測試009 069 aaaaaaaaaaaaaaaaaaaa [32個空格或任何字符]」 - - > [匹配],第2個字符串「00202510027680 1901160000000000000000000007000測試009 069 aaaaaaaaaaaaaaaaaaaa [no space or character]」 - >與第一個字符串相同,但沒有空格或字符[匹配] – TaeV

相關問題