要查看数据,我使用正则表达式。我的一个正则表达式是(它们是动态的,根据计算机需要查找的内容进行更改 - 使用它们搜索游戏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获胜的最短途径。)
有没有办法匹配整个字符串(或者只是我提供的字符串之后的最后一个数字)?
提前致谢!
答案 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)
您不必使用正则表达式
is_digit
)这就是全部