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

为什么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>
  • 写回答

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: \|.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题