2014-03-01 29 views

回答

2
char\s\(.+\)\s*\[\d\] 
     ^^ ^^ 

在你的正常的高亮部分表達式,您匹配()字符,它們不會出現在您的輸入文本中。您必須刪除轉義字符才能使其成爲實際的捕獲組,因此您可以在替換文本中使用其內容。

下一個問題是你只匹配方括號內的一個數字。你也想接受一個以上的數字,所以請使用\d+而不是\d

最後,我認爲你的替換字符串應該是String $1,因爲匹配的組是變量名稱而不是內容。

Regex.Replace(input, @"char\s(.+)\s*\[\d+\]", @"String $1"); // String buf; 
+0

其他幾點:你真的需要在「char」之後匹配\ s嗎?它可能永遠只是一個空間,對吧?字符名稱和括號之間是否會有空格字符?如果字符名稱從不包含正常單詞字符以外的任何內容,則最好使用「\ w」而不是「。」。最後,你不需要逃避],因爲它不是一個特殊的角色,除非它跟隨一個未封閉的[。也就是說,正則表達式可以簡化爲:char(\ w +)\ [\ d +]' – CAustin