我有以下字符串:
Giants 2 9 : 10 L.Tynes 22 yd . Field Goal ( 4 - - 3 , 1 : 20 ) 0 3 Cowboys 2 1 : 01 K.Ogletree 10 yd . pass from T.Romo ( D.Bailey kick ) ( 7 - 73 , 2 : 33 ) 7 3 Cowboys 3 10 : 24 K.Ogletree 40 yd . pass from T.Romo ( D.Bailey kick ) ( 9 - 80 , 4 : 36 ) 14 3 Giants 3 5 : 11 A.Bradshaw 10 yd . run ( L.Tynes kick ) ( 9 - 89 , 5 : 13 ) 14 10 Cowboys 3 0 : 40 D.Bailey 33 yd . Field Goal ( 8 - 65 , 4 : 31 ) 17 10 Cowboys 4 5 : 57 M.Austin 34 yd . pass from T.Romo ( D.Bailey kick ) ( 8 - 82 , 7 : 06 ) 24 10 Giants 4 2 : 36 M.Bennett 9 yd . pass from E.Manning ( L.Tynes kick ) ( 12 - 79 , 3 : 21 ) 24 17 Time : 2 : 53
子字符串的前缀可以是“Cowboys”或“Giants”。该字符串始终以右括号)
和两个数字结尾。
我甚至无法想象Regex要使用什么。我可以使用字符串函数并循环遍历字符串,但是一个正则表达式会帮助我以后。也许我可以使用分割功能,但这是我的头脑。
我想我可以解析“牛仔”然后“巨人”。
答案 0 :(得分:1)
我认为这个RegEx给出了你想要的东西:
(Cowboys|Giants).*?\)\s\d+\s\d+
“牛仔”或“巨人”后跟任意字符,直到你得到一个正确的paren,一个空格,一些数字,一个空格和一些更多的数字。
答案 1 :(得分:0)
我不知道ColdFusion,但这可以在python中完成:
match = re.findall(re.compile('((Giants|Cowboys)(.(?!Cowboys|Giants))*.)', re.DOTALL), s)
其中s
是提供的字符串。 re.DOTALL
表示.
匹配空格。 re.findall
表示进行全局搜索,reFindAll
可能也会这样做。
正则表达式做到了这一点:
.
)并尽可能多地匹配(这意味着匹配所有字符,直到“Cowboys”或“巨人”。由于有三个组,您感兴趣的组在ColdFusion中的编号可能不同。在python中,它们嵌入在父组中。
>>> match[0]
('Giants 2 9 : 10 L.Tynes 22 yd . Field Goal ( 4 - - 3 , 1 : 20 ) 0 3', 'Giants', '3')
>>> match[1]
('Cowboys 2 1 : 01 K.Ogletree 10 yd . pass from T.Romo ( D.Bailey kick ) ( 7 - 73 , 2 : 33 ) 7 3', 'Cowboys', '3')
>>> match[2]
('Cowboys 3 10 : 24 K.Ogletree 40 yd . pass from T.Romo ( D.Bailey kick ) ( 9 - 80 , 4 : 36 ) 14 3', 'Cowboys', '3')
我认为在大多数其他语言中,您会改为match[1], match[4], match[7], ...
。