Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有人能帮我弄点regex吗?_C#_Regex_Arrays - Fatal编程技术网

C# 有人能帮我弄点regex吗?

C# 有人能帮我弄点regex吗?,c#,regex,arrays,C#,Regex,Arrays,我试图从下面的字符串中获取一个int[]。我最初是在做一个Regex().Split(),但是正如您所看到的,没有一个明确的方法来分割这个字符串。我可以在[a-z]上拆分,但之后我必须删除逗号。已经很晚了,我想不出一个好办法来做这件事 "21,false,false,25,false,false,27,false,false,false,false,false,false,false,false" 有什么建议吗?对以下内容进行拆分: [^\d]+ 如果字符串不以数字开头,则可能在开始处得到一

我试图从下面的字符串中获取一个
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]
(在数组中尝试一下,只是为了好玩)。一个更健壮的解决方案是尝试根据定义的区域性解析每个令牌,并返回有效的数字。这可以很容易地进行调整,以支持小数、指数或民族数字格式:

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;
    }
}
静态IEnumerable GetInteger(字符串s)
{
CultureInfo culture=CultureInfo.InvariantCulture;
字符串[]标记=s.Split(',');
foreach(令牌中的字符串令牌)
{
整数;
if(Int32.TryParse(标记、NumberStyles.Integer、区域性、out number))
收益返回数;
}
}

从这个示例字符串中,您想要
[21,25,27]
还是
[21,0,0,25,0,0,27,0,…]
(其中false=0)?非常好,非常感谢。我知道我缺少正则表达式部门,但这是一个相当新手的疏忽。出于某种原因,我不得不去掉两条前斜线。它们的用途是什么?@Joey Green:正斜杠是许多语言中正则表达式的常用分隔符(源于perl)。我想C#(我其实不知道)不是这些语言中的一种。我将删除我答案中的斜线。请将答案标记为正确。我使用的是Regex().Split(),它没有接受任何StringSplitOptions的构造函数。除非你知道更好的方法,否则我可以忽略“”元素。这是一篇关于在使用Regex()时删除空元素的帖子。再次感谢你。你帮了大忙。