有人能帮我做一些正则表达式吗

本文关键字:正则表达式 | 更新日期: 2023-09-27 18:00:34

我正试图从以下字符串中获取int[]。我最初是在做Regex().Split(),但正如你所看到的,没有一个明确的方法来分割这个字符串。我可以在[a-z]上拆分,但之后我必须删除逗号。时间已经晚了,我想不出一个好办法来做这件事。

"21,false,false,25,false,false,27,false,false,false,false,false,false,false,false"

有什么建议吗?

有人能帮我做一些正则表达式吗

拆分以下内容:

[^'d]+

如果字符串不是以数字开头,则可能在开头得到一个空元素;如果字符串不是由数字结尾,则可能会在结尾得到一个空白元素。如果发生这种情况,您可以修剪这些元素。更好的是,如果Regex().Split()支持某种不返回空字符串的标志,请使用它。

这里的一个简单解决方案是将字符串与模式'd+匹配。有时,按不想匹配的值划分更容易,但在这里,它起到了反模式的作用。:

MatchCollection numbers = Regex.Matches(s, @"'d+");

另一个解决方案是使用常规String.Split和一些LINQ魔术。首先我们用逗号分隔,然后检查给定令牌中的所有字母是否都是数字:

var numbers = s.Split(',').Where(word => word.All(Char.IsDigit));

一个通常被忽略的事实是,.Net中的'd匹配所有Unicode数字,而不仅仅是[0-9](在数组中尝试١٢''163 5;,只是为了好玩)。一个更健壮的解决方案是尝试根据您定义的区域性解析每个令牌,并返回有效的数字。这可以很容易地适应于支持小数、指数或种族数字格式:

static IEnumerable<int> GetIntegers(string s)
{
    CultureInfo culture = CultureInfo.InvariantCulture;
    string[] tokens = s.Split(',');
    foreach (string token in tokens)
    {
        int number;
        if (Int32.TryParse(token, NumberStyles.Integer, culture, out number))
            yield return number;
    }
}