如何在Elixir中获取空字节两侧各3个字符(含空字节)?
解决方法
要提取<<0>>两侧各3个字符(包含该标记本身),关键是精准匹配紧邻<<0>>的前后3个字符——你之前的正则里的.*?<<0>>会匹配非紧邻的内容,导致结果不符合预期。
精准匹配(前后字符足够的场景)
如果能确定<<0>>前后至少有3个字符,直接用以下正则即可:
str = "hello this isa<<0>>string." # 匹配紧邻<<0>>的前3个字符、标记本身、后3个字符 Regex.run(~r/.{3}<<0>>.{3}/, str) |> hd() # 输出:"isa<<0>>str"
兼容边界情况(前后字符不足3个的场景)
如果需要处理<<0>>位于字符串开头/结尾、前后字符不足3个的情况,可以调整正则:
str1 = "a<<0>>string." str2 = "hello this isa<<0>>ab" # 匹配最多3个前置字符、标记本身、最多3个后置字符 Regex.run(~r/.{0,3}<<0>>.{0,3}/, str1) |> hd() # 输出:"a<<0>>str" Regex.run(~r/.{0,3}<<0>>.{0,3}/, str2) |> hd() # 输出:"isa<<0>>ab"
分组提取(灵活拼接结果)
如果需要单独获取前后的3字符组,也可以用分组捕获后手动拼接:
str = "hello this isa<<0>>string." [_, prefix, suffix] = Regex.run(~r/(?<=.{0,2})(.{3})<<0>>(.{3})/, str) result = prefix <> "<<0>>" <> suffix # result 为 "isa<<0>>str"
内容的提问来源于stack exchange,提问作者l288
相关产品推荐
相关产品推荐

