我想在多行字符串中使用正则表达式在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))
我似乎在做我应该做的所有事情,但是什么也没印出来。显然m
是null
,它在我的字符串中找不到任何内容。我在做什么错了?
答案 0 :(得分:0)
您的代码有一些问题:
当您提供的样本中的标签为Final score :
(大写Final Score:
,冒号前没有空格({{1} }))。相反,请匹配标签S
类似数组的结构在Python中为零索引。索引:
将对应第一个匹配项,索引Final Score:
将对应第二个匹配项,依此类推。您正在尝试访问0
,在您的示例中它不会产生任何结果(没有定义捕获组,因此所有内容都将位于1
中)。
您尚未“隔离”捕获组中的数字。将用于与数字数字匹配的部分模式括在括号(m.group(1)
)中,以表示捕获组。
您的代码应看起来像这样:
m.group(0)
答案 1 :(得分:0)
匹配[^ ]*
可以匹配0+倍的任何字符,除了一个广泛匹配的空格。
您可以使匹配更具体,使数字与可选的小数部分匹配,并用捕获组将其包围。
还请注意,您使用的是小写字母s,空格和冒号都颠倒了。
如果匹配项位于行的开头,请使用锚点^
和re.MULTILINE
^Final Score: (\d+(?:\.\d+)?)
示例代码
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