有人能帮我做一些正则表达式吗
本文关键字:正则表达式 | 更新日期: 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;
}
}