【问题标题】:Removing invalid characters from price从价格中删除无效字符
【发布时间】:2010-12-03 12:22:32
【问题描述】:

我有一个场景,我必须使用 C# 从价格字符串中删除某些字符。

我正在寻找一个正则表达式来删除这些字符或比这更好的东西。

例如,如果价格字符串是

"3,950,000 ( Ex. TAX )"

我想从字符串中删除"( Ex. TAX )"

基本上我必须从字符串中删除除数字、点和逗号之外的任何字符。

【问题讨论】:

  • 实际上是它唯一的例子......肯定还有其他字符......
  • 但是您在“Ex. TAX”中有一个点,您要保留还是删除它?
  • 它会像你用括号显示的那样以类似的方式出现,还是你认为它可以以其他方式出现?

标签: c# asp.net regex


【解决方案1】:

正则表达式总是很难正确处理,因为输入可能会有很大差异,但我认为这个可以满足您的需求:

string pattern = @"([\d]+[,.]{0,1})+";
string cleanedPrice = Regex.Match(price, pattern).Value;

解释:

(         - start matching group
[\d]+     - match any decimal digit, at least once
[,.]{0,1} - ...followed by 0 or 1 comma or dot
)         - end of group
+         - repeat at least once

【讨论】:

    【解决方案2】:

    当一个简单的替换就行时,为什么要使用正则表达式?

    string clean = "3,950,000 ( Ex. TAX )".Replace(" ( Ex. TAX )", string.Empty);
    

    【讨论】:

      【解决方案3】:

      试试这个

      myPrice.Replace(" ( Ex. TAX ),"")
      

      【讨论】:

      • 我的情况就是这样。我必须从字符串中删除除数字、点(。)和逗号(,)之外的任何字符
      【解决方案4】:
      String price = "3,950,000 ( Ex. TAX)".Replace(" ( Ex. TAX)","");
      

      【讨论】:

      • 我的情况就是这样。我必须从字符串中删除除数字、点(。)和逗号(,)之外的任何字符
      【解决方案5】:

      您可以使用以下正则表达式

      案例 1:如果 ( Ex.TAX ) 是常量,您可以使用字符串函数 String.Replace 删除文本。

      案例 2:如果您需要仅包含 的数字,以下是您可以用来提取相同的正则表达式

      [0-9,]{1,}

      案例3:if ( 是不是一直都在数字后面,可以使用下面的正则

      \d.*(?=\()

      以下是正则表达式的 c# 代码

      public static Regex regex = new Regex(
            "\\d.*(?=\\() ",
          RegexOptions.IgnoreCase
          | RegexOptions.CultureInvariant
          | RegexOptions.IgnorePatternWhitespace
          | RegexOptions.Compiled
          );
      //// Capture the first Match, if any, in the InputText
      // Match m = regex.Match(InputText);
      

      【讨论】:

      • 我的情况就是这样。我必须从字符串中删除除数字、点(。)和逗号(,)之外的任何字符
      • 嗨 Shivi,我认为第二种情况对你有用。但是您需要确保字符串中只有 1 个数字。对于两个以上的数字,它不会返回正确的结果。您可以使用 [0-9,.]{1,} 但同样存在问题。有 .在文字之间。因此,您首先需要确保只有 1 个数字并且它位于第一个位置。你能写一些示例,以便于理解吗?
      【解决方案6】:
       Regex rex = new Regex(@"(?:(?:\d{1,2},)?(?:\d{3},)*(?:\d{3})(?:\.\d+){0,})|(\d+)");
      
       Console.WriteLine(rex.Match("3,950,000 ( Ex. TAX )").Groups[0].Captures[0].Value);
       Console.WriteLine(rex.Match("3,950,000,000").Groups[0].Captures[0].Value);
       Console.WriteLine(rex.Match("3,950,000,000UHFWF#FWHFWEFE").Groups[0].Captures[0].Value);
       Console.WriteLine(rex.Match("3,950,000,000,000,000.00").Groups[0].Captures[0].Value);
      

      输出:

      • 3,950,000
      • 3,950,000,000
      • 3,950,000,000
      • 3,950,000,000,000,000.00

      【讨论】:

        【解决方案7】:

        要查找“( Ex. TAX )”,试试这个正则表达式:

        /\( Ex\. TAX \)/i
        

        【讨论】:

        • 我的情况就是这样。我必须从字符串中删除除数字、点(。)和逗号(,)之外的任何字符
        • @Shivi,如果需要澄清,请编辑问题,而不是重复相同的评论。谢谢!
        猜你喜欢
        • 2022-11-14
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 2013-12-22
        • 2016-08-17
        相关资源
        最近更新 更多