例如,我有這樣的字符串:變化串某些部分,但沒有一個部分 - 在那裏是數字
ex250-r-ninja-08-10r_
我怎麼可能將其更改爲這樣的字符串?
ex250 r ninja 08-10r_
,你可以看到我改變這一切 - 空間,但並沒有改變它在那裏我有XX-XX
一部分......我怎麼會做這樣的字符串替換在C#中? (也字符串可以有不同的長度)
我對這樣做的 -
但如何留下 - 在數字模式XX-XX?
例如,我有這樣的字符串:變化串某些部分,但沒有一個部分 - 在那裏是數字
ex250-r-ninja-08-10r_
我怎麼可能將其更改爲這樣的字符串?
ex250 r ninja 08-10r_
,你可以看到我改變這一切 - 空間,但並沒有改變它在那裏我有XX-XX
一部分......我怎麼會做這樣的字符串替換在C#中? (也字符串可以有不同的長度)
我對這樣做的 -
但如何留下 - 在數字模式XX-XX?
您可以使用正則表達式僅在某些情況下執行替換。在這種情況下,如果或者短劃線的一側是非數字,您希望執行替換。這不是因爲它可能是一件簡單的事情,但你可以使用:
string ReplaceSomeHyphens(string input)
{
string result = Regex.Replace(input, @"(\D)-", "${1} ");
result = Regex.Replace(result, @"-(\D)", " ${1}");
return result;
}
這可能是因爲有一個在一個正則表達式來做到這一點更狡猾的方式,但我懷疑這會更復雜太: )
這將取代 - 作爲我的代碼,或者這只是XX-XX的一部分? – brabertaser19
@ brabertaser1992:我不明白你的評論,但你爲什麼不試試呢? –
現在沒有時間,會看以後... – brabertaser19
使用StringBuilder
的非常不方便的方法。如果之前的兩個字符和後面的兩個字符都不是數字,它將用空格替換所有-
。
StringBuilder sb = new StringBuilder();
for (int i = 0; i < text.Length; i++)
{
bool replace = false;
char c = text[i];
if (c == '-')
{
if (i < 2 || i >= text.Length - 2) replace = true;
else
{
bool leftDigit = text.Substring(i - 2, 2).All(Char.IsDigit);
bool rightDigit = text.Substring(i + 1, 2).All(Char.IsDigit);
replace = !leftDigit || !rightDigit;
}
}
if (replace)
sb.Append(' ');
else
sb.Append(c);
}
既然你說你會不會有連字符在您的字符串的開始,那麼你需要捕獲的-
每次出現由一組字符包含至少一個字母和零個或多個前面號碼。要達到此目的,請在您的正則表達式中使用positive lookbehind。
string strRegex = @"(?<=[a-z]+[0-9]*)-";
Regex myRegex = new Regex(strRegex, RegexOptions.IgnoreCase | RegexOptions.Multiline);
string strTargetString = @"ex250-r-ninja-08-10r_";
string strReplace = @" ";
return myRegex.Replace(strTargetString, strReplace);
下面是結果:
'XX-XX'部分只能是數字?它可能像'ab-cd'? –
@SonerGönül是的,只有數字 – brabertaser19
在字符串的開頭是否會有「 - 」? –