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

标签 c# regex

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

  • 一个字母 fst
  • 多次:
    • 至少一个数字
    • 一个字母 fst

这是我想出的正则表达式:(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 :

enter image description here

详情

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

关于c# - 正则表达式与预期不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395029/

相关文章:

c# - 为什么我在 C# 类中收到此错误?

regex - grep 包括新行

regex - 正则表达式找不到任何匹配项来使用 ansible.builtin.replace 替换文本

php - file_get_contents 不工作?

c# - 可以使用属性来防止调用方法吗?

c# - 交互式设计时用户控制

c# - 事件似乎没有正确连接

c# - 在 C# 中将整个 xml 文件复制到其他 xml

python - 正则表达式 - 在字符串中查找最后找到的符号的位置

javascript - 检查自由代码营中的回文(不需要解决方案)