3

私は本当のナッツのように見える問題を抱えています。HTML ページを読み取り、XPath を使用して必要な要素をいくつか選択するために、HTMLAgilityPackを使用しています。これはうまくいきます。

XPATH を使用して、この DIV (441676) である番号も選択しようとしています。

<div class="info">
       Money:
       441 676,-<br>        
</div>

私はなんとか数字を選択し、この素晴らしい方法を使用してそれをトリミングしました: 文字列内の空白を削除する最速の方法

でも、441と676の間の空白はどうやっても消えません。他の場所の空白をトリミングしても問題ありません。機能しないのは数字の間だけです。ここで何が欠けているか知っている人はいますか?

4

2 に答える 2

3

非分割スペースを扱っているように見えます。リンク先の方法を使用して、2 つの提案があります。

1 つ目は、配列を更新toExcludeして次の文字を含めることです。

var str = s.ExceptChars(new[] { ' ', '\t', '\n', '\r','\u00A0'});

注: 配列は決して変更されず、この関数を呼び出すたびに再割り当てしたくないため、おそらく配列を静的グローバル変数に移動する必要があります。

別の方法として、次のように関数を更新してChar.IsWhiteSpaceExceptChars関数を使用することもできます。

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(); 
} 
于 2012-06-19T13:07:33.617 に答える
1

よし、この方法で解決しました。最速の方法で 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' }));
于 2012-06-19T13:09:20.687 に答える