dongniaoli1822
2017-10-26 02:35
浏览 235
已采纳

为什么regexp.FindAllString返回带有不需要的空字符串的匹配结果? [重复]

This question already has an answer here:

there is the regexp expression :

302\=.+?190\=(\d|\.)+|` 

and this is the string be matched:

8=FIX.4.4|9=181|35=i|34=6|49=XCD1|52=20171025-08:33:56.791|56=Q142|296=3|302=5|295=1|299=0|188=0.74499|190=0.74549|302=4|295=1|299=0|188=0.74996|190=0.75026|302=3|295=1|299=0|188=88.751|190=88.801|10=022|

the result should be:

302=5|295=1|299=0|188=0.74499|190=0.74549
302=4|295=1|299=0|188=0.74996|190=0.75026
302=3|295=1|299=0|188=88.751|190=88.801

be it return results with some empty strings:

[]string{"",
       "",
       "",
       "",
       "302=5|295=1|299=0|188=0.74499|190=0.74549",
       "302=4|295=1|299=0|188=0.74996|190=0.75026",
       "302=3|295=1|299=0|188=88.751|190=88.801",
       "",
       "",
       "",
       "",
       ""
       ....
}

the code is below:

string := `8=FIX.4.4|9=181|35=i|34=6|49=XCD1|52=20171025-08:33:56.791|56=Q142|296=3|302=5|295=1|299=0|188=0.74499|190=0.74549|302=4|295=1|299=0|188=0.74996|190=0.75026|302=3|295=1|299=0|188=88.751|190=88.801|10=022|`
re := regexp.MustCompile(`302\=.+?190\=(\d|\.)+|`)
re.FindAllString(a1, -1)

you can try it on: https://play.golang.org/p/0x_lBAX6Vk

</div>

图片转代码服务由CSDN问答提供 功能建议

此问题已经存在 在这里有答案

  • 在正则表达式中必须转义哪些特殊字符? 11个答案\ r

    有正则表达式:

      302 \ =。+?190 \ =(\ d | \。)+ |`
       
     
     

    ,这是字符串be 匹配:

      8 = FIX.4.4 | 9 = 181 | 35 = i | 34 = 6 | 49 = XCD1 | 52 = 20171025-08:33:56.791 | 56 =  Q142 | 296 = 3 | 302 = 5 | 295 = 1 | 299 = 0 | 188 = 0.74499 | 190 = 0.74549 | 302 = 4 | 295 = 1 | 299 = 0 | 188 = 0.74996 | 190 = 0.75026 | 302 = 3 |  295 = 1 | 299 = 0 | 188 = 88.751 | 190 = 88.801 | 10 = 022 | 
       
     
     

    结果应为: <预> <代码> 302 = 5 | 295 = 1 | 299 = 0 | 188 = 0.7449 9 | 190 = 0.74549 \ N302 = 4 | 295 = 1 | 299 = 0 | 188 = 0.74996 | 190 = 0.75026 \ N302 = 3 | 295 = 1 | 299 = 0 | 188 = 88.751 | 190 = 88.801

    ,因为它会返回带有空字符串的结果:

      [] string {“”,
    “”,
    “  “,
    ”“,
    ” 302 = 5 | 295 = 1 | 299 = 0 | 188 = 0.74499 | 190 = 0.74549“,
    ” 302 = 4 | 295 = 1 | 299 = 0 | 188 = 0.74996 |  190 = 0.75026“,
    ” 302 = 3 | 295 = 1 | 299 = 0 | 188 = 88.751 | 190 = 88.801“,
    ”“,
    ”“,
    ”“,
    ”“,\  n“” 
     .... 
    } 
       
     
     

    代码如下:

      string:  =`8 = FIX.4.4 | 9 = 181 | 35 = i | 34 = 6 | 49 = XCD1 | 52 = 20171025-08:33:56.791 | 56 = Q142 | 296 = 3 | 302 = 5 | 295 = 1 |  299 = 0 | 188 = 0.74499 | 190 = 0.74549 | 302 = 4 | 295 = 1 | 299 = 0 | 188 = 0.74996 | 190 = 0.75026 | 302 = 3 | 295 = 1 | 299 = 0 | 188 = 88.751 | 190 =  88.801 | 10 = 022 |`
    re:= regexp.MustCompile(`302 \ =。+?190 \ =(\ d | \。)+ |`)
    re.FindAllString(a1,-1)
       
     
     

    ,您可以尝试以下方法: https:// play .golang.org / p / 0x_lBAX6Vk

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongshao4207 2017-10-26 02:39
    已采纳

    That's because of the trailing |.

    xxx| expression means - xxx OR an empty string.

    You should escape it so that it was treated literally: \|.

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题