【问题标题】:.Net Core Regex Replace returning different from localhost.Net Core Regex Replace 返回的结果与本地主机不同
【发布时间】:2021-05-12 15:38:47
【问题描述】:

发生了一些奇怪的事情,我有一个 Excel 文件中的值,我使用 Regex.Replace() 将值转换为我需要的值,本地一切正常,但是当我发布返回时与 Regex.Replace( ):

给定这个值:376900€

我使用这个代码:

x = Regex.Replace(sheet.Cells['D' + row].Text.Replace("€", ""), @"\s+", "");
                        
var Amount = int.Parse(x); 

本地 x 是:376900

但在应用服务中发布时 x 为:376,900,解析为 int 时会引发异常。

我在没有使用 Regex.Replace() 的情况下解决了它,但想知道为什么会这样?是因为服务器在北欧,Regex.Replace() 使用了一些英国转换吗?

谢谢

【问题讨论】:

  • 您似乎正在使用 Excel 互操作,当您的 localPC 与应用服务器打开时,Excel 文件的文化/格式可能不同。这可能意味着 Excel 文件的文本显示“376,900€”。考虑使用 'sheet.Cells['D' + row].Value.Replace',因为 Value 属性采用基础值而不是格式化。我怀疑工作表的值 376900,它已被格式化,你得到奇怪的结果
  • @MacroMarc 它可能是服务器位置中的 Excel 互操作文化,如果你想创建一个答案,我会接受它
  • @JasonPan 你的回答有助于说它不是来自正则表达式但没有回答,建议我调试并查看我已经知道并在我的问题中表达的值......虽然 MacroMarc 评论正确切中要害。
  • @MarchalPT 远程调试,不在本地。
  • 我想说的是,你应该考虑使用 sheet.Cells['D' + row].Value 而不是 sheet.Cells['D' + row].Text 这在大多数情况下是不可取的使用 .Text 的案例 除了解决文化问题之外,如果您不需要使用 .Text,请尝试使用 .Value2 或 .Value

标签: excel regex asp.net-core azure-web-app-service parseint


【解决方案1】:

我的测试结果。 Azure 应用服务返回值与本地相同。

所以 MacroMarc 的评论是完全正确的。应该是Excel文件中该字段的数据格式。在本地调试时,我得到376900€(根据当地文化/格式)。

建议

您可以使用调试模型部署您的 azure Web 应用。并使用远程调试,检查sheet.Cells['D' + row].Text 的值。相信经过调试,你会找到你想要的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2022-01-09
    • 2018-01-31
    • 2021-12-28
    • 1970-01-01
    • 2016-10-10
    • 2021-09-04
    • 2016-11-10
    相关资源
    最近更新 更多