正则表达式多选项字符排除:匹配时排除目标字符串末尾8字符
正则表达式匹配问题解决
我们要匹配字符串 Active Projects>Project Name 2022101,原正则是 ^(?<tloption>.*)>(?<Option>.*)$,现在需要让Option捕获组只拿到>后面部分去掉末尾8个字符的内容。之前试了下面几个正则都不行:
^(?<tloption>.*)>(?<Option>[a-z]*)$^(?<tloption>.*)(?<Option>.*(?<!\d{8}))$^(?<tloption>[^\d]*)(?<Option>[^\d]*(?<!\d{8}))$
可用的解决正则
直接用这个正则就能实现需求:
^(?<tloption>.*)>(?<Option>.*).{8}$
要是担心>后面内容不够8个字符时误匹配,可以用正向预查来限制:
^(?<tloption>.*)>(?<Option>.*)(?=.{8}$)
简单解释
^(?<tloption>.*)>:把从开头到>的内容抓到tloption组里(?<Option>.*):抓>后面直到倒数第8个字符的内容,存到Option组.{8}$:匹配最后8个任意字符,确保Option不包含这部分;用(?=.{8}$)的话只是检查位置,不消耗字符
如果你的场景里末尾8个字符固定是数字(比如示例里的日期串),可以把.{8}换成\d{8},正则改成:
^(?<tloption>.*)>(?<Option>.*)\d{8}$
内容的提问来源于stack exchange,提问作者TracyChapan1608
相关产品推荐
相关产品推荐

