2014-05-21 34 views
1

我是新來的正則表達式。正則表達式匹配字符串agasint模式

我想要實現的是檢查一個字符串文本是否符合以下模式。

"xxx(name="yyy", country="yyy")" 

編輯: xxx可以是任意長度的字母或數字,但必須以字母開頭。 yyy可以是任何長度的任何字符。 「,」和「country」之間可以有零個或任意數量的空白。

例如,下面是一個有效的字符串

"TargetVal(name="White House", country="US")" 

以下字符串是無效

"TargetVal(name="White House", country="US")+546+!!!" 
"343TargetVal(name="White House", country="US")" 
"!TargetVal(name="White House", country="US")" 
"CenterVal(name="Green House",789808 country="US")" 
"CenterVal(name="Green House", country="US", dfjl)" 
"OuterVal(name=Green House, country="US")" 

以下是我在C#中迄今所做

var formula = @"TargetVal(name=""White House"", country=""US"")"; 
var pattern = @"\w\(name=""\w"",\sccy=""\w""\)"; 
ismatching= Regex.IsMatch(formula, pattern, RegexOptions.IgnoreCase); 

顯然這不符合所有的規定。有人可以提供一些提示嗎?

+0

正則表達式字符類,如'\ s'和'\ w'嚴絲合縫一個字符,除非添加改性劑。因此,在您的示例中,您只需查找一個字符,恰好就是一個空格,依此類推。使用修飾符如'*'(匹配0或更多)和'+'(匹配一個或多個)。 – duncan

+0

建立正則表達式的一種方法,特別是如果你剛剛入門,就是從你的完全匹配字符串開始。確保它匹配成功。然後開始用正則表達式替換常量值。 – duncan

+0

謝謝,這是一個非常有用的建議 – wd113

回答

0

您可以使用以下正則表達式。

var rgx = new Regex(@"(?i)^[a-z][a-z0-9]+\(name="".*?"",\s*country="".*?""\)$"); 

Demo

+0

謝謝,它的工作原理。 – wd113

0

嘗試var pattern = "^[a-zA-Z][a-zA-Z0-9 ]+\\(name=\"[a-zA-Z][a-zA-Z0-9 ]+\",\\s*country=\"[a-zA-Z][a-zA-Z0-9 ]+\"\\)$";

我的假設,那你的xxx並不只存在了的字母和數字,但可以包含空格(如White House不包括它們)。

相關問題