1

我有一个看起来像这样的结果列表:

1lemon_king9mumu (2-1), YearofHell (2-0), kriswithak (2-1)0.44440.75000.4444
2mumu6lemon_king (1-2), MogwaiAC (2-0), Dathanja (2-1)0.66670.62500.5655
3MogwaiAC6Dathanja (2-0), mumu (0-2), Jebnarf (2-1)0.55560.57140.5417
4Jebnarf6YearofHell (2-1), kriswithak (2-0), MogwaiAC (1-2)0.44440.62500.4266
5YearofHell3Jebnarf (1-2), lemon_king (0-2), Mig82 (2-1)0.66670.37500.6012
6Dathanja3MogwaiAC (0-2), Mig82 (2-1), mumu (1-2)0.55560.37500.5417
7Mig823Bye, Dathanja (1-2), YearofHell (1-2)0.33330.42860.3750
8kriswithak0Jebnarf (0-2), lemon_king (1-2)0.83330.20000.6875

我希望能够在排名(第一个数字)之后拉出该人的用户名,但它与玩家以及他们的第一个对手获得的积分混合在一起。

例如,第一个人的名字是“Lemon_king”,他的对手是“Mumu”​​、“YearofHell”和“Kriswithak”。右边的数字对我来说无关紧要,但我遇到的主要问题是玩家赢得的积分数在那里。Lemon_King 获得 9 分获得第一名。我通常会通过查找 1 到 9 之间的字符串来获取名称,但玩家用户名中也可以包含 9。

谁能想到一个很好的解决方案来获取用户名?

谢谢

4

4 回答 4

3

我认为您需要一个要比较的用户名列表;对于正则表达式,结果列表看起来不够“常规”。

例如线

7Mig823Bye, Dathanja

可能是“Mig82”3 分对“Bye,Dathanja”,但也可以是“Mig8”,23 分,“Bye,Dathanja”或“Mig8”,2 分,“3Bye,Dathanja”。

那是对的吗?因为如果是这样,您将无法摆脱简单的解决方案。

编辑:威尔逊评论说,获取用户名列表可能是一种选择。在这种情况下,类似以下的方法可能会起作用:

/^\d+?(username1|username2|username3)\d+?(username1|username2|username3)/

可能需要一些摆弄才能正确。

这是一个 plnkr 用您提供的数据演示它:http ://plnkr.co/edit/nJeGfbfHgvh5zJcTWRXS?p=preview

也就是说,正则表达式可能不是这项工作的正确工具。

于 2013-07-27T21:54:36.517 回答
1

据我所知,你想要类似的东西

 (?x)        # allow whitespace and comments just like
             # any real programming language
 ^           # beginning of line
 (   \d+ )   # starts with one or more digits: CAPTURE 1
 (?= \D  )   # must have a non-digit following
 (   \w+ )   # capture one or more "word" characters: CAPTURE 2
 (   \d  )   # next is a single digit: CAPTURE 3
 (?= \D  )   # must have a non-digit following
 (   \w+ )   # capture one or more "word" characters: CAPTURE 4

 # now add things for the rest of the line if you want 

您的用户名现在应该在第二次捕获中。我比绝对必要的要小心一点,但如果你最终弄错了这个,你可能需要那个。如果您想移动东西或拉出更多东西,我已经把所有的捕获都放了。

于 2013-07-28T02:08:20.800 回答
0

如果您想要第一个数字和第二个数字之间的内容,请提供更多信息:

[0-9]+([^0-9])

第一组将包含第一个用户名。

请对此发表评论(以便我检查),但请更详细地编辑您的问题。

于 2013-07-27T21:55:04.310 回答
0

我不会使用正则表达式。调试它会很痛苦,而且你永远不会 100% 确定你已经覆盖了所有的边缘情况。

尝试使用您选择的语言的内置字符串操作函数进行“手动”解析。

于 2013-07-27T21:57:02.443 回答