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()时删除空元素的帖子。再次感谢你。你帮了大忙。