我有三种不同类型的字符串(点表示任何字母数字字符):
Won 1, 2, 3, 4, Lost 5, 6, 7, ...
5 Wins, ...
Winner
如何创建正则表达式仅匹配获胜数字?我试过类似的东西
Won (?:(\d)[, ]?)+
,但它只匹配第一个数字,但是如果我取出"赢了",它将匹配所有数字。
感谢。
答案 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。