例如,我有这样的字符串:变化串某些部分,但没有一个部分 - 在那里是数字
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
在字符串的开头是否会有“ - ”? –