2013-06-03 94 views
1

我有一個字符串,我使用RegEx將字符串替換爲特定的模式。基本上我要修剪的命名組如何使用c#修剪正則表達式中的空白#

內的白色空間中,例如:

myString1: substringof('test',Name) 
myString2: substringof(' test ',Name) 
myString3: substringof('test ',Name) 

Expected output: Name.Contains(\"test\") 

myString4: substringof(' test test ',Name) 
myString5: substringof(' test test',Name) 
myString6: substringof('test test ',Name) 

Expected output: Name.Contains(\"test test\") 

CODE:

var replaceRegex = new Regex(substringof\\(\\s*'(?<text>[^']+'?[^']*)'\\s*,\\s*(?<pname>[\\w\\[\\]]+)\\s*\\)"); 
myString = replaceRegex.Replace(myString, "${pname}.Contains(\"${text}\")"); 

任何幫助將不勝感激。提前致謝!!

+11

爲什麼正則表達式,而不是[裝飾](HTTP:// MSDN .microsoft.com/EN-US /庫/ t97s7bs3.aspx)? – Sayse

回答

6

使用string.Trim,但如果你堅持正則表達式:

[^\s.*](?<pname>\w.*)[^\s.*] 

,說沒有空間,那麼一個「字」可空格隔開,然後不佔空間。

另一種有趣的方式,以避免正則表達式,如果要修剪字與字之間的空間,是使用字​​符串分割和結合​​:

var text = " name name "; // sample 
var result = string.Join(" ", text.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); 
+2

或者只是使用'(?<=^\ s *)\ S。*?(?= \ s * $)'。匹配將是修剪的字符串。 – JDB

+1

還不錯。我希望儘可能避免向前看/後退,但兩者都能正常工作。 – Haney

+1

'string.Trim'幾乎肯定是正確的。任何其他解決方案都是不必要的複雜。 – JDB