2009-07-21 110 views
2

對於正則表達式,我非常缺乏經驗。我想要做的是迭代通過一個字符串列表,並嘗試找到具有特定模式的字符串。我感興趣的字符串將採用"some text ***{some text}***" 的形式如何編寫RegEx以匹配?我試圖這樣:.NET RegEx幫助

Regex expression = new Regex("***"); 

但這給了我一個錯誤。 parsing "***" - Quantifier {x,y} following nothing.

有人能指出我正確的方向嗎?

我想通過選擇列表選項循環,並添加一個css類到相關的選項。

Regex expression = new Regex("***"); 
foreach (ListItem li in listItemCollection) 
{ 
    if (expression.IsMatch(li.Value)) 
     li.Attributes.Add("class", "highlight1"); 
} 

但這顯然不起作用。

任何幫助表示讚賞, 〜CK在聖地亞哥

回答

9

你需要躲避星號,因爲它是在正則表達式有效的元字符。

Regex expression = new Regex(@"\*\*\*"); 
+0

固定的編譯錯誤... – 2009-07-21 20:16:09

+0

感謝,我都忘了有關:) – inkedmn 2009-07-21 20:16:45

+2

Regex.Escape也很有用: 新的正則表達式(Regex.Escape( 「***」)); – 2009-07-22 01:42:47

3

*在正則表達式中有特殊含義。

如果您正在尋找符合3個星號,嘗試

Regex expression = new Regex(@"\*\*\*"); 

編輯:

如果你只是想驗證一個字符串包含 「***」,看看bdukes' answer

+0

修復了編譯錯誤... – 2009-07-21 20:16:39

2

嘗試這樣:

\*\*\*[^\*]+\*\*\* 
3

如果您所要做的只是匹配三個星號,爲什麼不使用string.Contains方法而不是正則表達式呢?

foreach (ListItem li in listItemCollection) 
{ 
    if (li.Value.Contains("***")) 
     li.Attributes.Add("class", "highlight1"); 
} 
0

如果你想要的文字,您應該試試這個正則表達式

\*{3}\{[^\}]*}\*{3} 

這將找到***{some text}***

前的*你應該使用這個

^[\w\s]*\*{3}\{[^\}]*\}\*{3} 
  • ^ - be和0次以上的輸入
  • [\w\s]*在z,AZ,0-9,任何字符的軋花_空白或者
  • \*{3}三個星號
  • \{匹配{
  • [^\}]*任何字符以外} 0或多次
  • \}比賽}
  • \*{3}比賽三個星號