C# C-使用常规技术消除字符之间的空白不起作用

C# C-使用常规技术消除字符之间的空白不起作用,c#,xpath,whitespace,C#,Xpath,Whitespace,我有个问题,看起来真是个大问题。我使用XPath来读取HTML页面,并使用XPath选择我需要的几个元素。这个很好用 使用XPATH,我还尝试选择这个DIV 441676的数字 <div class="info"> Money: 441 676,-<br> </div> 我成功地选择了号码,并用这种奇妙的方法修剪它: 但无论我做什么,441和676之间的空白不会消失。 在其他地方修剪空白效果很好。只有在数字之间它

我有个问题,看起来真是个大问题。我使用XPath来读取HTML页面,并使用XPath选择我需要的几个元素。这个很好用

使用XPATH,我还尝试选择这个DIV 441676的数字

<div class="info">
       Money:
       441 676,-<br>        
</div>
我成功地选择了号码,并用这种奇妙的方法修剪它:

但无论我做什么,441和676之间的空白不会消失。
在其他地方修剪空白效果很好。只有在数字之间它才不起作用。有人知道我在这里遗漏了什么吗?

在我看来,你正在处理一个不间断的空间。使用您链接的方法,我有两个建议

第一个是更新toExclude数组以包含以下字符:

var str=s.ExceptCharsnew[]{','\t','\n','\r','\u00A0'}

注意:您可能应该将数组移动到一个静态全局变量,因为它永远不会更改,并且您不希望每次调用此函数时都重新分配它

另一种选择是更新ExceptChars函数以使用该函数,如下所示:

public static string ExceptChars(this string str, IEnumerable<char> toExclude) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < str.Length; i++) 
    { 
        char c = str[i]; 
        if (!Char.IsWhiteSpace(c))
            sb.Append(c); 
    } 
    return sb.ToString(); 
} 

好吧,我就是这样解决的。在中使用ExceptChars方法 我将其修改为AllowChars方法,该方法只保留给定的字符。像这样:

public static string AllowedChars(string str, IEnumerable<char> toInclude)
{
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.Length; i++)
        {
            char c = str[i];
            if (toInclude.Contains(c))
                sb.Append(c);
        }
        return sb.ToString();
    }
使用如下方法:

string money_fixed =  AllowedChars(money, new HashSet<char>(new[] {'1','2', '3', '4', '5', '6', '7', '8', '9', '0' }));

这个空间的字符码是什么?有不止一个字符可以创建一个空格,通常的空格是0x20。也许它不是通常的空白字符。为什么不在最后一个阶段尝试:441 676。替换@Rumplin它找不到空格,否则链接的方法会起作用。@Rupal:例如,只需执行yourstring.ToCharray.Selectx=>bytex.ToArray,即可从字符串中获取字节数组并在调试器中查看它。如果它是一个常用的空格十六进制:0x20,则在相应的位置应该是32 0x20,以十进制表示。我使用您的解决方案。包括'u00A0'修复了问题,而不需要像我那样创建新方法。谢谢货币可以包含小数点、逗号、连字符和货币符号。是的,一般来说你是对的,但在这种情况下,数字的格式总是000,所以我不需要考虑这个问题。