我正在尝试编写一个正则表达式来匹配以下文本:
- 一个字母
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
$
- 字符串结尾。
关于c# - 正则表达式与预期不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395029/