如何用正则表达式提取字符串中最后一个'-'后、'_'前的内容?
正则提取"FileType"的方案
针对示例字符串randomname-id-mininthostname-FileType_20221118.zip,可以用以下几种正则方案精准提取"FileType":
方案一:使用正向/反向断言
匹配最后一个-之后、第一个_之前的内容,正则表达式为:(?<=-)[^-_]+(?=_)解释:
(?<=-):正向反向断言,确保匹配内容的前面是-[^-_]+:匹配任意非-和_的字符,直到遇到_停止,避免多余字符混入(?=_):正向断言,确保匹配内容的后面是_
方案二:使用捕获组
如果你的正则引擎支持捕获组,可采用更直观的写法,提取第一个捕获组的内容即可:-([^-_]+)_解释:
-:匹配目标内容前的分隔符-([^-_]+):捕获组,精准匹配目标内容(非-和_的字符序列)_:匹配目标内容后的分隔符_
你之前使用的(?=-).*(?<=_)返回错误结果,是因为.*会匹配任意字符直到最后一个符合断言的位置,从而包含了前面的多余内容。而[^-_]+限制了匹配范围,只取两个分隔符之间的目标内容。
内容的提问来源于stack exchange,提问作者dentix
相关产品推荐
相关产品推荐

