Python:正则表达式找不到匹配项

时间:2020-05-19 13:57:39

标签: python regex

我想在多行字符串中使用正则表达式在117.5之后隔离Final score:

string = '''Shots Fired: 146 pra 131 Kills: 131
Shots Hit: 131 L=Xo¥s11o) (sam U} Deaths: O
89.73% 89.73 100%
Final Score: 117.5 “scone
Previous High Score: 115.2'''
 m = re.search("Final score :[^ ]*", string)
if m:
   print(m.group(1))

我似乎在做我应该做的所有事情,但是什么也没印出来。显然mnull,它在我的字符串中找不到任何内容。我在做什么错了?

2 个答案:

答案 0 :(得分:0)

您的代码有一些问题:

  1. 当您提供的样本中的标签为Final score :(大写Final Score:,冒号前没有空格({{1} }))。相反,请匹配标签S

  2. 类似数组的结构在Python中为零索引。索引:将对应第一个匹配项,索引Final Score:将对应第二个匹配项,依此类推。您正在尝试访问0,在您的示例中它不会产生任何结果(没有定义捕获组,因此所有内容都将位于1中)。

  3. 您尚未“隔离”捕获组中的数字。将用于与数字数字匹配的部分模式括在括号(m.group(1))中,以表示捕获组。

您的代码应看起来像这样:

m.group(0)

Repl.it

答案 1 :(得分:0)

匹配[^ ]*可以匹配0+倍的任何字符,除了一个广泛匹配的空格。

您可以使匹配更具体,使数字与可选的小数部分匹配,并用捕获组将其包围。

还请注意,您使用的是小写字母s,空格和冒号都颠倒了。

如果匹配项位于行的开头,请使用锚点^re.MULTILINE

^Final Score: (\d+(?:\.\d+)?)

Regex demo

示例代码

import re

string = '''Shots Fired: 146 pra 131 Kills: 131
Shots Hit: 131 L=Xo¥s11o) (sam U} Deaths: O
89.73% 89.73 100%
Final Score: 117.5 “scone
Previous High Score: 115.2'''
m = re.search(r"^Final Score: (\d+(?:\.\d+)?)", string, re.MULTILINE)

if m:
    print(m.group(1))

输出

117.5