正则表达式 - 基于条件的子字符串



我正在尝试编写一个正则表达式以在 C# 中使用它

正则表达式的用途是根据输入大小获取输入的子字符串

正则表达式目标

如果输入大小小于 13,则获取完整输入

否则,如果输入大小大于 25,则从输入中获取从索引 3 到索引 16 的子字符串(这样我就可以跳过前三个字符(

这是我到目前为止的

(?(?=.{25,}).{3}(.{13})|(?(?=.{0,13})(.{0,13})))

这是行不通的,因为当输入大小大于 25 时,结果不会修剪前三个字符

在这里查看

请注意,非正则表达式解决方案相当简单:

public string check(string s)
{
    var res = "";
    if (s.Length>=25)
        res = s.Substring(3,13);
    else if (s.Length <= 13)
        res = s;
    return res;
}

如果你想使用正则表达式,你可以使用

^(?=.{25,}).{3}(?<res>.{13})|^(?=.{0,13}$)(?<res>.*)

请参阅正则表达式演示。使用 RegexOptions.Singleline 进行编译以支持输入中的换行符。

  • ^ - 字符串的开头
  • (?=.{25,}) - 如果字符串开头后有 25 个或更多字符,则匹配
  • .{3} - 任意 3 个字符
  • (?<res>.{13}) - 并将 13 个字符捕获到res组中
  • | - 或
  • ^(?=.{0,13}$) - 确保字符串中不超过 0 到 13 个字符,然后
  • (?<res>.*) - 抓取整个字符串(如果未使用RegexOptions.Singleline,则仅匹配 1 行(。

将其用作

var res = "";
var m = Regex.Match(s, @"^(?=.{25,}).{3}(?<res>.{13})|^(?=.{0,13}$)(?<res>.*)")
if (m.Success) 
{
    res = m.Groups["res"].Value;
}

查看 C# 演示。

最新更新