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

时间:2018-03-09 11:13:09

标签: c# regex

我正在尝试编写一个正则表达式,以便在C#

中使用它

使用正则表达式是根据输入大小

获取输入的子字符串

正则表达式目标

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

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

这是我到现在所说的

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

这不起作用,因为当输入大小大于25时,结果不会修剪前三个字符

检查here

1 个答案:

答案 0 :(得分:4)

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

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>.*)

请参阅regex demo。使用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# demo