我有一个如下所示的结果列表:
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个。
任何人都可以想到能够抓住用户名的问题的好方法吗?
由于
答案 0 :(得分:3)
我认为您需要一个要比较的用户名列表;对于正则表达式,结果列表看起来不够“正常”。
例如
行7Mig823Bye, Dathanja
可能是“Mig82”3分vs“Bye,Dathanja”,但它也可能是“Mig8”,23分,“Bye,Dathanja”或“Mig8”,2分,“3Bye,Dathanja”。
这是对的吗?因为如果是这样,你就不会侥幸逃脱一个简单的解决方案。
编辑:Wilson评论说获取用户名列表可能是一个选项。在这种情况下,类似下面的内容可能会起作用:
/^\d+?(username1|username2|username3)\d+?(username1|username2|username3)/
可能需要一些摆弄才能做对。
这是一个用你提供的数据展示它的plnkr:http://plnkr.co/edit/nJeGfbfHgvh5zJcTWRXS?p=preview
尽管如此,正则表达式可能不适合这项工作。
答案 1 :(得分: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
您的用户名现在应该在第二次捕获中。我已经比严格必要的时候更加谨慎,但如果你最终改变这一点,你可能需要这样做。我已经把所有的捕获物放在你想移动东西或拉出更多东西的情况下。
答案 2 :(得分:0)
如果您想要第一个数字和第二个数字之间的东西,请提供更多信息:
[0-9]+([^0-9])
第一组将包含第一个用户名。
请对此进行评论(以便我查看),然后更详细地编辑您的问题。
答案 3 :(得分:0)
我不会使用正则表达式。调试它会很痛苦,而且你永远不会100%肯定你已经涵盖了所有边缘情况。
尝试使用您选择的语言内置字符串操作函数进行'手动'解析。