對於空間的問題很容易,如果你的語言支持零寬度向後看
var result = Regex.Replace(@"thisIsAnExampleSentanceHereIsAnotherExampleWithMoreWordsInIt", "(?<=[a-z])([A-Z])", " $1");
或者即使它不支持
var result2 = Regex.Replace(@"thisIsAnExampleSentanceHereIsAnotherExampleWithMoreWordsInIt", "([a-z])([A-Z])", "$1 $2");
我使用C#,但正則表達式應該可以在支持替換的任何語言中使用,使用$1
... $n
。
但是對於低位到高位的情況,您不能直接在正則表達式中執行。你可以通過一個正則表達式得到第一個字符,如:^[a-z]
,但你不能把它轉化。
例如在C#中,你可以使用一個匹配評估,以改變輸入字符串做
var result4 = Regex.Replace(result, "^([a-z])", m =>
{
return m.ToString().ToUpperInvariant();
});
。
然後,您可以甚至融合兩個一起
var result4 = Regex.Replace(@"thisIsAnExampleSentanceHereIsAnotherExampleWithMoreWordsInIt", "^([a-z])|([a-z])([A-Z])", m =>
{
if (m.Groups[1].Success)
{
return m.ToString().ToUpperInvariant();
}
else
{
return m.Groups[2].ToString() + " " + m.Groups[3].ToString();
}
});
我用
什麼語言是你使用? – xanatos 2012-03-15 19:33:17
迭代字符串並在每個大寫字母前添加空格可能更容易。 – Ilion 2012-03-15 19:37:48
like([a-z] +)+(([A-Z])([a-z] +))*?那樣有用嗎? – Colleen 2012-03-15 19:39:06