回答:
これはそれを行うはずです:
string s = "joe ($3,004.50)";
s = Regex.Replace(s, "[^0-9.]", "");
Regex.Replace(s, "[^$0-9.]", "");
。ドル記号を残しておきます。
正規表現は次のとおりです。
[^0-9.]
あなたは正規表現をキャッシュすることができます:
Regex not_num_period = new Regex("[^0-9.]")
次に使用します:
string result = not_num_period.Replace("joe ($3,004.50)", "");
ただし、文化によっては、3.004,50のように、金額を表記するための規則が異なることに注意してください。
.
は特別な意味はありません。
受け入れられた回答について、MatthewGunnは、文字列全体のすべての数字、コンマ、およびピリオドが一緒に圧縮されるという点で有効なポイントを上げます。これはそれを回避します:
string s = "joe.smith ($3,004.50)";
Regex r = new Regex(@"(?:^|[^w.,])(\d[\d,.]+)(?=\W|$)/)");
Match m = r.match(s);
string v = null;
if (m.Success) {
v = m.Groups[1].Value;
v = Regex.Replace(v, ",", "");
}
(?:^|[^w.,])(\d[\d,.]+)(?=\W|$)
も文字列に「H25」に一致します「joe.smith25($ 3,004.50)」
問題のある文字を削除するアプローチには、潜在的に問題があります。.
文字列のどこかに別のものが存在する場合はどうなりますか?削除する必要がありますが、削除されません!
非数字またはピリオドを削除すると、文字列joe.smith ($3,004.50)
は解析不能に変換され.3004.50
ます。
イムホ、特定のパターンにマッチし、グループを使ってそれを抽出するほうがいいです。簡単なことは、正規表現を使用して、隣接するすべてのコンマ、数字、およびピリオドを見つけることです。
[\d,\.]+
サンプルテスト実行:
Pattern understood as:
[\d,\.]+
Enter string to check if matches pattern
> a2.3 fjdfadfj34 34j3424 2,300 adsfa
Group 0 match: "2.3"
Group 0 match: "34"
Group 0 match: "34"
Group 0 match: "3424"
Group 0 match: "2,300"
次に、一致ごとに、すべてのコンマを削除し、パーサーに送信します。のようなケースを処理12.323.344
するには、別のチェックを実行して、一致する部分文字列に最大で1つあることを確認します.
。
""
。
Single.Parse()
かということSingle.TryParse
ですか?
joe.smith ($3,004.50)
ですか?問題のある文字クラスを削除するだけでは、かなりうまくいかない場合があります。