Skip to main content
 首页 » 编程设计

c#之正则表达式与预期不匹配

2024年02月25日28cyq1162

我正在尝试编写一个正则表达式来匹配以下文本:

  • 一个字母 f、s 或 t
  • 多次:
    • 至少一个数字
    • 一个字母 f、s 或 t

这是我想出的正则表达式:(f|s|t)(\d+(f|s|t))*,但它似乎不起作用。

输入:f20s30t

预期匹配:

  • f
  • 20 多岁
  • 30吨

实际匹配:

  • f
  • 30t
  • t

为什么我的正则表达式错误?

编辑:我正在使用 this分割输入的方法。

请您参考如下方法:

由于您使用的是 C#,您可以将字符串与模式匹配并访问每个重复捕获组的捕获集合:

var s = "f20s30t"; 
var m = Regex.Match(s, @"^([fst])(\d+[fst])*$"); 
if (m.Success) 
{ 
    Console.WriteLine(m.Groups[1].Value); 
    foreach (var g in m.Groups[2].Captures.Cast<Capture>().Select(t => t.Value)) 
        Console.WriteLine(g); 
} 

这种方法的优点是它还验证 字符串,并且您不会得到像 TEXT random f20s30t here.... 这样的字符串的结果。

参见 C# demo , 输出

f 
20s 
30t 

这是 regex demo :

详情

  • ^ - 字符串的开始
  • ([fst]) - 捕获第 1 组:f、s 或 t
  • (\d+[fst])* - 0 次或多次重复(捕获到第 2 组,每个值都保存在组堆栈中):
    • \d+ - 1+ 位
    • [fst] - f、s 或 t
  • $ - 字符串结尾。