正则表达式以某种格式获取数字

时间:2014-05-14 17:34:53

标签: regex python-3.x

我有三种不同类型的字符串(点表示任何字母数字字符):

  1. Won 1, 2, 3, 4, Lost 5, 6, 7, ...
  2. 5 Wins, ...
  3. Winner
  4. 如何创建正则表达式仅匹配获胜数字?我试过类似的东西 Won (?:(\d)[, ]?)+,但它只匹配第一个数字,但是如果我取出"赢了",它将匹配所有数字。

    感谢。

3 个答案:

答案 0 :(得分:1)

你必须使用一个正则表达式吗?分割字符串然后获取数字会更容易。

这是一个.NET示例:

// replace everything after Lost with a blank string (would be bad if Lost came before Won)
string text = Regex.Replace( inputString, @"Lost.+", "" );

给出:"赢得1,2,3,4,"

然后

Regex.Matches( inputString, @"\d+" );

答案 1 :(得分:1)

你不需要正则表达式:

>>> foo="Won 1, 2, 3, 4, Lost 5, 6, 7, 8"
>>> [x for x in foo if x.isdigit()]
['1', '2', '3', '4', '5', '6', '7', '8']
>>>

如果您想要捕获多位数字,那就行不通了,但是对于您引用的示例,并且鉴于您的标题引用数字而不是数字,它将起作用。

这将获得没有附加标点符号的多位数字 - 您可以根据需要修改对split()的调用,以便根据您的输入获得所需的结果:

>>> foo="This 23 is not a string with 32 numbers"
>>> [x for x in foo.split() if x.isdigit()]
['23', '32']

答案 2 :(得分:0)

这样可以解决问题:

(?<=Won).*(?=Lost)|\d.*(?=Wins)

当你给出问题的python标签时,在phytex中对它进行了测试。幸运的是,python为正则表达式启用了lookafter和lookbehind。