C#:从字符串中提取数字,然后将逗号(,)更改为点(。)

Posted

技术标签:

【中文标题】C#:从字符串中提取数字,然后将逗号(,)更改为点(。)【英文标题】:C#: Extract number out of string, then change comma(,) to dot(.) 【发布时间】:2012-05-14 23:54:34 【问题描述】:

我正在使用 Visual Web Ripper 提取网站上产品的名称和价格。

当我从表格中提取价格时,它的格式如下:

氪。 129,30

我需要提取 129,30,然后将逗号变成点 (129.30)。

Visual Web Ripper 可以使用脚本来修改提取的内容。它可以使用标准的Regex、C#和VB.NET。

在 Regex 选项卡中我发现

(\d+.)?(\d+)(.\d+)?

给我 129,30,但我不能把逗号变成点。

因此我必须使用 C#。它带有这个标准脚本:

using System;
using VisualWebRipper.Internal.SimplehtmlParser;
using VisualWebRipper;
public class Script

    //See help for a definition of WrContentTransformationArguments.
    public static string TransformContent(WrContentTransformationArguments args)
    
        try
        
            //Place your transformation code here.
            //This example just returns the input data
            return args.Content;
        
        catch(Exception exp)
        
            //Place error handling here
            args.WriteDebug("Custom script error: " + exp.Message);
            return "Custom script error";
        
    

如何修改它以提取数字然后用点替换逗号?

【问题讨论】:

【参考方案1】:

String.Replace 是一个选项 (text.Replace(",", "."))。

最好用正确的 CultureInfo 正确解析数字,而不是用 InvariantCulture 重新格式化。

【讨论】:

感谢您的回复。我怎么做? :) 我今天第一次开始研究 C#。 我可以将文化信息应用于字符串(Kr. 129,30)并获得 129.30 吗?还是我必须先提取号码?我不知道如何在 C# 中以与 Regex 相同的方式使用 Regex。【参考方案2】:

这显然是Krona,所以我们应该使用瑞典文化信息来翻译它。首先我们从输入开始:

var original = "Kr. 129,30";

了解文化:

using System.Globalization;
var culture = CultureInfo.GetCultureInfo("sv-SE");

这种文化要求货币字符串为kr(不区分大小写),但我们有Kr.。所以让我们更新它:

var format = (NumberFormatInfo)culture.NumberFormat.Clone();    
format.CurrencySymbol = "Kr.";    

现在文化感知解析:

var number = Decimal.Parse(original, NumberStyles.Currency, format);

现在number 包含一个已正确解析的小数。

【讨论】:

谢谢! :) 使用return number.ToString(); 我得到“129,30”。现在我如何得到“129.30”? :) 显然不是瑞典克朗,是吗?为什么不是挪威或丹麦文化? @galskab number.ToString(CultureInfo.InvariantCulture) 但真正的答案取决于为什么你想得到一个带点小数分隔符的字符串。 @phoog 正确,但这是一个例子——我不会硬编码瑞典!他从一个购物网站上得到这个 - 我会使用那个网站的国家。还有你对为什么要用'.'把它变成一个字符串的评论。是正确的。 @phoog True :) 它实际上是挪威语,但这没关系 :) 谢谢,CultureInfo.InvariantCulture 有效! :)

以上是关于C#:从字符串中提取数字,然后将逗号(,)更改为点(。)的主要内容,如果未能解决你的问题,请参考以下文章

输入类型数字使用逗号 - 将点更改为逗号

从字符串中提取带逗号的数字

将 GST 编号字段的小数分隔符更改为逗号

在C#中提取字符串末尾的数字

将字符时间更改为 Postgres 中的日期? [关闭]

R中的数据导入,但将分隔符从逗号更改为分号