我正在为我感兴趣的游戏编写日志解析器,当用户的用户名中有双引号时,我遇到了问题。以下行是没有双引号的用户名示例,以便为问题提供一些上下文:
L 02/02/2015 - 20:30:17: "bowser<10><[USERID]><Blue>" triggered "damage" against "mario<3><[USERID2]><Red>" (damage "50") (realdamage "37") (weapon "sniperrifle")
使用我当前的正则表达式\\\"(.*?)\\\"
它运作正常。我能够识别第一个用户名(bowser),事件(损坏)和第二个用户名(mario),以及损坏和realdamage值。但是,当用户在其名称中使用引号时会引入此问题,就像bowser在此行中所做的那样:
L 02/02/2015 - 20:30:36: "mario<7><[USERID]><Blue>" triggered "damage" against "bowser -"The Ship Sets Sail"<12><[USERID2]><Red>" (damage "60") (realdamage "10") (weapon "sniperrifle")
当我解析该行时,我得到第一个名称正确,并且事件名称正确。但是,当我读到第二个名字时,我得到bowser -
,当我读到损坏时,我得到<12><[USERID2]><Red>
导致NumberFormatException
我希望在正确的方向上提供一些提示。
答案 0 :(得分:0)
我通过使用不太可能发生的常量隔离名称来解决问题,然后我将用户名存储在List<Player>
中,并在提取信息之前清理每一行,以防止出现脏字。