Regex 复杂正则表达式情况

Regex 复杂正则表达式情况,regex,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 4Jebnarf6YearofHel

我的结果列表如下所示:

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

有谁能想出一个好办法来解决这个问题,能够抓住人的用户名


谢谢

我想你们需要一个用户名列表来进行比较;对于正则表达式来说,结果列表似乎不够“正则”

比如那条线

7Mig823Bye, Dathanja
可能是“Mig82”对“拜拜,达尚贾”,3分,但也可能是“Mig8”,23分,“拜拜,达尚贾”或“Mig8”,2分,“拜拜,达尚贾”

对吗?因为如果是这样的话,你就不会得到一个简单的解决方案

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

/^\d+?(username1|username2|username3)\d+?(username1|username2|username3)/
这可能需要一些摆弄才能正确

以下是一个plnkr,用您提供的数据演示:


也就是说,正则表达式可能不是这个工作的合适工具。

我认为您需要一个用户名列表来进行比较;对于正则表达式来说,结果列表似乎不够“正则”

比如那条线

7Mig823Bye, Dathanja
可能是“Mig82”对“拜拜,达尚贾”,3分,但也可能是“Mig8”,23分,“拜拜,达尚贾”或“Mig8”,2分,“拜拜,达尚贾”

对吗?因为如果是这样的话,你就不会得到一个简单的解决方案

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

/^\d+?(username1|username2|username3)\d+?(username1|username2|username3)/
这可能需要一些摆弄才能正确

以下是一个plnkr,用您提供的数据演示:


也就是说,正则表达式可能不是此项工作的合适工具。

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

[0-9]+([^0-9])
第一个组将包含第一个用户名


请对此进行评论(因此我选择)编辑您的问题,并提供更多详细信息。

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

[0-9]+([^0-9])
第一个组将包含第一个用户名


请对此发表评论(因此我选择)编辑您的问题,但要更详细。

我不会使用正则表达式。调试它将是一件痛苦的事情,而且你永远不会100%确定你已经涵盖了所有的边缘案例


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

我不会使用正则表达式。调试它将是一件痛苦的事情,而且你永远不会100%确定你已经涵盖了所有的边缘案例


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

据我所知,您希望

 (?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 

您的用户名现在应该在第二个捕获中。我比严格必要的要小心一点,但如果你最后吃了这个,你可能需要它。我已经把所有捕获的东西都放好了,以防你想四处移动或取出更多的东西。

据我所知,你想要这样的东西

 (?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 

您的用户名现在应该在第二个捕获中。我比严格必要的要小心一点,但如果你最后吃了这个,你可能需要它。我已经把所有的捕获都放好了,以防你想四处移动或取出更多的东西。

很难/几乎不可能找到一个好的不容易出错的正则表达式,因为用户名也可以包含数字。如果可能的话,将文本更改为JSON对象会更容易。用户名中可以有数字吗?更好的问题是,为什么您的结果列表一开始就是这样…@acheong87是正确的。这些数据是垃圾。不要因为依赖这种垃圾格式而使问题复杂化。试着自己写一些东西,如果它不起作用,就把它带给我们帮助你。你开始,我们帮助。我们不是为你写的。向我们展示您尝试过的实际代码,然后我们可以从中帮助您。如果你自己先尝试一下,你很可能会得到非常接近的答案。很难/几乎不可能找到一个好的不容易出错的正则表达式,因为用户名也可以包含数字。如果可能的话,将文本更改为JSON对象会更容易。用户名中可以有数字吗?更好的问题是,为什么您的结果列表一开始就是这样…@acheong87是正确的。这些数据是垃圾。不要因为依赖这种垃圾格式而使问题复杂化。试着自己写一些东西,如果它不起作用,就把它带给我们帮助你。你开始,我们帮助。我们不是为你写的。向我们展示您尝试过的实际代码,然后我们可以从中帮助您。如果你先亲自尝试的话,很可能你会非常接近答案。我不认为你知道“正则表达式”中的“正则”是什么意思。是的,理想情况下,我希望获得7级:“Mig72”3分,而不是通过搜索所有玩家的用户名,这绝对是一种可能性,Jared的意思是,正则表达式无法知道他的3个解决方案中哪一个是正确的。除非你能加上额外的解释:排名总是个位数吗?用户名可以以数字开头吗?用户名列表仅在t之前有用