C#正则匹配分组需求:提取$开头代码与对应数据
C# 提取$开头代码及对应数据的解决方案
你当前的@"\$."只能匹配$加单个字符,无法提取后续关联的数据。要实现需求,需要使用带捕获组的正则表达式,将代码部分和数据部分分开捕获:
正则表达式说明
使用正则:@"\$([^\$])(.*?)(?=\$|$)"
\$:匹配$符号(转义是因为$在正则中是字符串结束标记)([^\$]):捕获组1,匹配$后的任意非$字符(即代码的第二个字符,如0、e等)(.*?):捕获组2,非贪婪匹配任意字符,直到遇到下一个$或字符串结尾(?=\$|$):正向预查,确保匹配终止于下一个$或字符串末尾,避免包含下一个代码的$
C# 代码实现
using System; using System.Text.RegularExpressions; class Program { static void Main() { string input = "$08$19$eABCDEF$fw123578$iA12356-78$j$k$xabc123"; string pattern = @"\$([^\$])(.*?)(?=\$|$)"; foreach (Match match in Regex.Matches(input, pattern)) { string code = $"${match.Groups[1].Value}"; string data = match.Groups[2].Value; Console.WriteLine($"Code: {code} - Data: {data}"); } } }
运行结果
Code: $0 - Data: 8 Code: $1 - Data: 9 Code: $e - Data: ABCDEF Code: $f - Data: w123578 Code: $i - Data: A12356-78 Code: $j - Data: Code: $k - Data: Code: $x - Data: abc123
这个方案会遍历所有匹配项,准确提取每个$开头的代码及其对应数据,包括无后续数据的$j、$k这类情况,输出空的Data值,完全符合你的要求。
内容的提问来源于stack exchange,提问作者Nguyễn Việt Tiến
相关产品推荐
相关产品推荐

