我正在尝试编写一个正则表达式,以便在C#
中使用它使用正则表达式是根据输入大小
获取输入的子字符串正则表达式目标
如果输入大小小于13,则获得完整输入
否则,如果输入大小大于25,则从输入中获取索引3到索引16的子字符串(以便跳过前三个字符)
这是我到现在所说的
(?(?=.{25,}).{3}(.{13})|(?(?=.{0,13})(.{0,13})))
这不起作用,因为当输入大小大于25时,结果不会修剪前三个字符
检查here
答案 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。