Python:Regex找不到匹配项

2024-05-12 08:26:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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,在我的字符串中找不到任何内容。我做错了什么


Tags: 字符串stringsamfinalscorehitxoscone
2条回答

匹配[^ ]*匹配任何字符的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

您的代码有一些问题:

  1. 当您提供的示例中的标签为Final Score:(大写S,冒号前没有空格(:)时,您使用的模式与Final score :匹配。相反,匹配标签Final Score:

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

  3. 你没有在一个捕获组中“隔离”你的数字。用括号(())将用于匹配数字的模式部分括起来,以表示捕获组

您的代码应该更像这样:

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('Final Score: ([^ ]*)', string)
if m:
   print(m.group(1))

Repl.it

相关问题 更多 >