C# 如何通过编号分隔字符串 (1. 2. ...)
C# how to separate a string by numbering (1. 2. ...)
我有这个字符串“1: This 2: Is 3: A 4: Test”,想根据编号拆分它,如下所示:
“1:这个”
“2:是”
“3:A”
“4:测试”
我认为这应该可以通过正则表达式实现,但不幸的是我对此了解不多。
这:string[] result = Regex.Split(input, @"\D+");
只是拆分没有冒号的数字及其后面的内容。
如果您像这样使用捕获组 ()
:
string[] result = Regex.Split(str, @"(\d+:)");
捕获的值也将添加到数组中。然后剩下要做的就是将每个第一个值与每个第二个值合并(我们跳过索引 0,因为它是空的):
List<string> values = new();
for (int i = 1; i < result.Length; i += 2)
{
values.Add(result[i] + result[i + 1]);
}
可能有更简洁的方法来执行此操作,但这行得通。
您可以使用
string[] result = Regex.Split(text, @"(?!^)(?=(?<!\d)\d+:)")
参见this regex demo。请注意,当您的项目符号点包含两位或更多位数字时,(?<!\d)
否定回顾是必要的。 详情:
(?!^)
- 不在字符串的开头
(?=(?<!\d)\d+:)
- 紧跟一个或多个数字(前面没有任何数字)和一个 :
字符的位置。
使用 \D+
匹配 1 个或多个非数字,因此将匹配 : This
以拆分。
除了使用拆分,您还可以匹配部分:
\b[0-9]+:.*?(?=\b[0-9]+:|$)
模式匹配:
\b
防止部分单词匹配的单词边界
[0-9]+:
匹配1+个数字和:
.*?
匹配尽可能少的字符
(?=\b[0-9]+:|$)
正面前瞻,断言 1+ 位数字和 :
或字符串末尾向右
C# 示例:
string str = "1: This 2: Is 3: A 4: Test";
string pattern = @"\b[0-9]+:.*?(?=\b[0-9]+:|$)";
MatchCollection matchList = Regex.Matches(str, pattern);
string[] result = matchList.Cast<Match>().Select(match => match.Value).ToArray();
Array.ForEach(result, Console.WriteLine);
输出
1: This
2: Is
3: A
4: Test
我有这个字符串“1: This 2: Is 3: A 4: Test”,想根据编号拆分它,如下所示:
“1:这个”
“2:是”
“3:A”
“4:测试”
我认为这应该可以通过正则表达式实现,但不幸的是我对此了解不多。
这:string[] result = Regex.Split(input, @"\D+");
只是拆分没有冒号的数字及其后面的内容。
如果您像这样使用捕获组 ()
:
string[] result = Regex.Split(str, @"(\d+:)");
捕获的值也将添加到数组中。然后剩下要做的就是将每个第一个值与每个第二个值合并(我们跳过索引 0,因为它是空的):
List<string> values = new();
for (int i = 1; i < result.Length; i += 2)
{
values.Add(result[i] + result[i + 1]);
}
可能有更简洁的方法来执行此操作,但这行得通。
您可以使用
string[] result = Regex.Split(text, @"(?!^)(?=(?<!\d)\d+:)")
参见this regex demo。请注意,当您的项目符号点包含两位或更多位数字时,(?<!\d)
否定回顾是必要的。 详情:
(?!^)
- 不在字符串的开头(?=(?<!\d)\d+:)
- 紧跟一个或多个数字(前面没有任何数字)和一个:
字符的位置。
使用 \D+
匹配 1 个或多个非数字,因此将匹配 : This
以拆分。
除了使用拆分,您还可以匹配部分:
\b[0-9]+:.*?(?=\b[0-9]+:|$)
模式匹配:
\b
防止部分单词匹配的单词边界[0-9]+:
匹配1+个数字和:
.*?
匹配尽可能少的字符(?=\b[0-9]+:|$)
正面前瞻,断言 1+ 位数字和:
或字符串末尾向右
C# 示例:
string str = "1: This 2: Is 3: A 4: Test";
string pattern = @"\b[0-9]+:.*?(?=\b[0-9]+:|$)";
MatchCollection matchList = Regex.Matches(str, pattern);
string[] result = matchList.Cast<Match>().Select(match => match.Value).ToArray();
Array.ForEach(result, Console.WriteLine);
输出
1: This
2: Is
3: A
4: Test