复杂的正则表达式情况

时间:2013-07-27 21:49:18

标签: regex

我有一个如下所示的结果列表:

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 个答案:

答案 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%肯定你已经涵盖了所有边缘情况。

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