2014-10-03 69 views
1

程序在電子表格中爲單元格的名稱提供了字符串。該電子表格可以包含一個名稱以字母a-zA-Z_開頭的單元格,但其他任何信息都是無效的。在第一個字母或下劃線之後,可以有字母數字或下劃線的任意組合。例如:使用正則表達式匹配字符串c#

______35we3I是一個有效的名稱

123dfdf是不是一個有效的名稱。

如果這些字符串存在,我想拋出一個異常。我是新來的正則表達式,但這是我想出來的,它不像我想要的那樣工作。

@"[a-zA-Z_][a-zA-Z_|\d]*" 

當第二個例子是在Regex.IsMatch函數傳遞,因爲表達式的後半部分是有效返回true。有沒有一種方法可以始終從字符串的開頭開始?

我應該說我嘗試使用{^}來達到上述條件,但當胡蘿蔔在那裏時它不接受任何東西。

+1

對我來說似乎很好,只是通過添加表達式的開始和結尾來測試它:這裏是鏈接http://rubular.com/r/UMIcvl0olc – 2014-10-03 15:15:14

+1

Avinash給出了很好的建議。我只想添加一些東西:爲了測試你的正則表達式,你可以使用RadSoftware正則表達式設計器(http://rad-software-regular-expression-designer.software.informer.com/1.4/),它非常強大,而且它的構建在.Net中,它提供與.Net正則表達式類完全相同的選項。 – AFract 2014-10-03 15:30:11

回答

4

您需要使用開始和結束錨點,並且不需要將|放入字符類中。 char類中的|將與文字|符號匹配。

@"^[a-zA-Z_][a-zA-Z_\d]*$" 

代碼:

String s = "123dfdf"; 
if (!Regex.IsMatch(s, @"^[a-zA-Z_][a-zA-Z_\d]*$")) { 
Console.WriteLine("Error! Wrong format."); 
} 
else { 
Console.WriteLine("Correct format."); 
} 

IDEONE

+0

非常感謝。我想我只是使用錯誤的網站來測試我的正則表達式。 – 2014-10-03 15:40:51

2

爲了測試你的正則表達式,你一個很好的網站here

爲了您的正則表達式,你想添加一些驗證程序你的正則表達式:

@"^[0-9a-zA-Z_][a-zA-Z_\d]*" 

與此,你的兩個字符串被驗證。

@"^[a-zA-Z_][a-zA-Z_\d]*" 

與此,只是字符串由不是一個數字開始被驗證。

+2

op不希望數字首先出現。 – 2014-10-03 15:21:28

+1

哦,對不起我的錯誤,感謝您的回覆:p – 2014-10-03 15:23:04

+1

字符類內部的'|'符合字面上的'|'符號。 – 2014-10-03 15:28:29