Python正则表达式Findall

时间:2014-01-10 00:11:57

标签: python regex

要查看数据,我使用正则表达式。我的一个正则表达式是(它们是动态的,根据计算机需要查找的内容进行更改 - 使用它们搜索游戏AI的数据):

O,2,([0-9],?){0,},X

在2之后,可以(并且很可能会)是其他数字,每个数字后跟一个逗号。

根据我的理解,这将匹配:

O,2,(any amount of numbers - can be 0 in total, each followed by a comma),X

这很好,并且(在RegExr中)适用于:

O,4,1,8,6,7,9,5,3,X
X,6,3,7,5,9,4,1,8,2,T
O,2,9,6,7,11,8,X # matches this
O,4,6,9,3,1,7,5,O
X,6,9,3,5,1,7,4,8,O
X,3,2,7,1,9,4,6,X
X,9,2,6,8,5,3,1,X

我的问题是我需要匹配原始提供的号码后的所有号码。所以,我希望匹配(在示例中)9,6,7,11,8

但是,在Python中实现它:

import re
pattern = re.compile("O,2,([0-9],?){0,},X")
matches = pattern.findall(s) # s is the above string

matches['8'],是最后一个数字,但我需要匹配给定的所有数字(所以'9,6,7,11,8')。

注意:我需要使用pattern.findall,因为你将不止一个匹配(我缩短了我的字符串列表,但实际上有大约2万个字符串),我需要找到最短的一个(如这将是AI获胜的最短途径。)

有没有办法匹配整个字符串(或者只是我提供的字符串之后的最后一个数字)?

提前致谢!

2 个答案:

答案 0 :(得分:3)

使用此:

O,2,((?:[0-9],?){0,}),X

查看实际操作:http://regex101.com/r/cV9wS1

import re

s = '''O,4,1,8,6,7,9,5,3,X
X,6,3,7,5,9,4,1,8,2,T
O,2,9,6,7,11,8,X
O,4,6,9,3,1,7,5,O
X,6,9,3,5,1,7,4,8,O
X,3,2,7,1,9,4,6,X
X,9,2,6,8,5,3,1,X'''

pattern = re.compile("O,2,((?:[0-9],?){0,}),X")
matches = pattern.findall(s) # s is the above string

print matches

输出:

['9,6,7,11,8']

说明:

通过将2,,X中的整个值捕获包装在()中,您最终也会捕获它。然后我使用(?: )忽略内部捕获集。

答案 1 :(得分:0)

您不必使用正则表达式

  1. 将字符串拆分为数组
  2. 检查项目0 == 0,项目1 == 2
  3. 检查最后一项== X
  4. 检查项目[2:-2]每个项目都是一个数字(is_digit
  5. 这就是全部