我正在尝试转换以下字符串:
★ Bayonet | Slaughter (Minimal Wear)
简单地说:
Bayonet | Slaughter (Minimal Wear)
为此,我尝试使用以下内容:(名称是包含上述内容的字符串)
name = name.Replace("★ ", "");
但是,字符串保持不变。我正在使用JSON响应检索字符串,该响应似乎表明使用以下序列创建了奇怪的文本(星号):
\u2605
但是,字符串似乎会自动转换为帖子顶部的那个奇怪的字符串。那么为什么name.replace函数无法替换这些字符?
答案 0 :(得分:5)
这可能是编码问题。 在C#部分,我建议你试着写一下:
name = name.Replace("\u2605", string.Empty);
而不是硬编码对应的字符。 .Net将为您处理\ u2605。
答案 1 :(得分:0)
我不清楚...
是否只是普通文本,我会认为是。将正则表达式替换为集合[â˜]
中不需要的所有字符:
Regex.Replace("★ Bayonet | Slaughter (Minimal Wear)", @"[â˜]", string.Empty);
结果如下:
...刺刀|屠杀(略有磨损)
注意实际的完整字符串,我可以写一个更好的模式匹配,以更外科的方式替换。
由于这些字符仅在开头,这使我们的任务更容易,并且不利于遍历整个结果;加快这个过程!
这是与正则表达式替换一起使用的模式^[^\{]
。
它表示匹配字符串^
开头的任何内容与我们的否定集[^ ]
,它将搜索除了之外的任何内容{
这是一个开头JSON用于一个或多个项目+
。一个或多个意味着如果没有匹配,则不会有替换;只会提取开头的匹配项。
string data = "â˜{\"success\":true,\"rgInventory\":{\"1509597855\":";
Console.WriteLine (data); // â˜{"success":true,"rgInventory":{"1509597855":
string pattern = @"^[^{]+";
Console.WriteLine (Regex.Replace(data, pattern, string.Empty));
// {"success":true,"rgInventory":{"1509597855":
答案 2 :(得分:0)
由于上述解决方案都不适用于您,因此只需切断奇怪的字符串而不是试图猜测正确的形状,可能会更简单。
以下方式,如果字符串以某种方式改变,你将避免再次做这件事的头痛:
因为我们知道奇怪的事件总是在字符串的开头,所以我们只是检查它是不是0-9 az或AZ而不是猜测它是什么字符... < / strong>
class Program
{
static void Main(string[] args)
{
string name = "★ Bayonet | Slaughter (Minimal Wear)";
name = fix_string(name);
Console.WriteLine(name);
}
static string fix_string(string str)
{
int fix=0;
while (fix<str.Length && (!(str[fix] > (char)48 && str[fix] < (char)57) && !(str[fix] > (char)65 && str[fix] < (char)90) && !(str[fix] > (char)97 && str[fix] < (char)122)))
{
fix++;
}
return str.Substring(fix,str.Length-fix);
}
}
PS:这是ascii表,因此您可以调整要从字符串开头修剪的字符,并调整函数以测试整个字符串,如果您希望以后
答案 3 :(得分:-2)
这段代码对我有用,也许你可以通过复制粘贴将它解释为你的代码?看看是否有效!完全不确定它是否是你想要的,但是。
String str = "★ Bayonet | Slaughter (Minimal Wear)";
str = str.Replace("★","");
Console.WriteLine(str);
Console.ReadLine();