【问题标题】:Getting Index of First Non Alpha character in a string C#获取字符串C#中第一个非字母字符的索引
【发布时间】:2015-10-22 17:32:07
【问题描述】:

每当我找到第一个非字母或空格时,我都会尝试拆分一个字符串(在索引处)。

我的正则表达式真的很生疏,并试图找到一些方向来让它发挥作用。

示例:“2015 年 8 月 14 日收到的付款 0.00 美元”是字符串。我能找到第一个数字


string alphabet = String.Empty;
string digit = String.Empty;
int digitStartIndex;

Match regexMatch = Regex.Match("Payments Received by 08/14/2015 $0.00", "\\d");

digitStartIndex = regexMatch.Index;
alphabet = line.Substring(0, digitStartIndex);
digit = line.Substring(digitStartIndex);

问题出在“本期金额 + 57.00 美元”之类的字符串时 我最终得到“本期金额 + $”

如果我还想包含特定的非字母数字字符以检查 $ + -,如何在 C# 中使用正则表达式?

编辑:我正在寻找上面示例中的输出(变量字母和数字)。
“本期金额”
“+ 57.00 美元”

【问题讨论】:

  • 什么是输入,什么是期望的输出
  • 您的问题措辞非常混乱。您到底期望输出是什么?

标签: c# regex


【解决方案1】:

要按照您提到的方式拆分字符串,请使用正则表达式查找初始 alpha/空格字符,然后查找其余字符。

var s = "Payments Received by 08/14/2015 $0.00";
var re = new Regex("^([a-z ]+)(.+)", RegexOptions.IgnoreCase);
var m = re.Match(s);
if (m.Success)
{
    Console.WriteLine(m.Groups[1]);
    Console.WriteLine(m.Groups[2]);
}

^ 对于查找开头的字符很重要。

【讨论】:

    【解决方案2】:

    啊,那我想你想要这个:

    void Main()
    {
        var regex = new Regex(@"(.*?)([\$\+\-].*)");
        var a = "Payments Received by 08/14/2015 $0.00";
        var b = "Amount This Period + $57.00";
    
        Console.WriteLine(regex.Match(a).Groups[1].Value);
        Console.WriteLine(regex.Match(a).Groups[2].Value);
        Console.WriteLine(regex.Match(b).Groups[1].Value);
        Console.WriteLine(regex.Match(b).Groups[2].Value);
    }
    

    输出:

    Payments Received by 08/14/2015 
    $0.00
    Amount This Period 
    + $57.00
    

    【讨论】:

      猜你喜欢
      • 2017-09-21
      • 2017-09-05
      • 2016-04-13
      • 2018-07-11
      • 2019-01-16
      • 2016-06-03
      • 1970-01-01
      • 2013-10-02
      • 2018-01-08
      相关资源
      最近更新 更多