如果长度超过x,则返回一些中间部分?

时间:2013-02-28 14:08:58

标签: regex

我目前正在使用像(.{12}$)|(^.{1,12}$)这样的RegEx - 类似“如果值为1到12长,返回它们,否则返回最后12个。

我想添加另一个子句,如果长度大于16,我需要返回它的一个子集(具体来说,从第5个字符开始,返回12)。

如何在同一个RegEx中执行此操作?

1 个答案:

答案 0 :(得分:1)

似乎与

一起使用
(?<=^.{4}).{12}|^.{1,12}$

这包含两部分。第一个处理字符串,长度至少为16个字符。为此,它开始匹配第五个字符(这是(?<=^.{4})的用途 - 确保前面恰好有四个字符)。之后必须至少有12个匹配的字符。

第二部分仅适用于1-12个字符的字符串,与完整字符串匹配。

快速PowerShell测试:

PS> '12345','1234567890','abcdefghijklmnopqrst'|%{if($_-match'(?<=^.{4}).{12}|^.{1,12}$'){$Matches}}

Name                           Value
----                           -----
0                              12345
0                              1234567890
0                              efghijklmnop