字符串 12s341df34518s谷歌90 我想匹配结果是 12s34 1df345 18s谷歌90 该怎么写? Regex.Matches(“12s341df34518s谷歌90”, @”1([\s\S]+)”); 不行 Regex.Matches(“12s341df34518s谷歌90”, @”1([\s\S]+?)”);也不行
要将字符串 12s341df34518s谷歌90 按照你指定的分割规则匹配成 12s34,1df345,18s谷歌90 三个部分,我们可以利用正则表达式的非贪婪匹配来实现这一点。
12s341df34518s谷歌90
12s34
1df345
18s谷歌90
具体而言,我们希望匹配所有以 1 开头的子字符串,直到下一个 1 字符或字符串的结尾。以下是实现这一功能的正则表达式和代码示例:
1
using System; using System.Text.RegularExpressions; class Program { static void Main() { string input = "12s341df34518s谷歌90"; string pattern = @"1[^1]*"; MatchCollection matches = Regex.Matches(input, pattern); foreach (Match match in matches) { Console.WriteLine(match.Value); } } }
解释: - 1[^1]* 解释如下: - 1 匹配数字 1。 - [^1]* 匹配任意数量的非 1 字符,使用 * 表示0或更多个。
1[^1]*
[^1]*
*
这个正则表达式会从每个 1 开始匹配,直到遇到下一个 1 或字符串结束,满足题目的要求。
运行这段代码,输出将是:
12s34 1df345 18s谷歌90
这正是你想要的结果。