我目前正在使用这样的正则表达式(.{12}$)|(^.{1,12}$)
- 类似于“如果值是 1 到 12 长,则返回它们,否则返回最后的 12。 ”
我希望添加另一个子句,如果长度大于 16,我需要返回它的一个子集(具体来说,从第 5 个字符开始,返回 12)。
如何在同一个 RegEx 中执行此操作?
我目前正在使用这样的正则表达式(.{12}$)|(^.{1,12}$)
- 类似于“如果值是 1 到 12 长,则返回它们,否则返回最后的 12。 ”
我希望添加另一个子句,如果长度大于 16,我需要返回它的一个子集(具体来说,从第 5 个字符开始,返回 12)。
如何在同一个 RegEx 中执行此操作?
它似乎与
(?<=^.{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