我可以翻译,以下是需要翻译的内容:
我有一些用文本文件表示数据的行。它们都遵循以下格式:
s = 'TheBears SUCCESS Number of wins : 14'
它们都以名称开头,然后是空格和文本 'SUCCESS Number of wins : ',最后是获胜次数 n1。有多个字符串,每个字符串都有不同的名称和值。我正在尝试编写一个程序,可以解析任何这些字符串,并返回数据集的名称和字符串末尾的数字值。我正在尝试使用正则表达式来实现这一点,我想到了以下方法:
import re
def winnumbers(s):
pattern = re.compile(r"""(?P<name>.*?) #starting name
\s*SUCCESS #whitespace and success
\s*Number\s*of\s*wins #whitespace and strings
\s*\:\s*(?P<n1>.*?)""",re.VERBOSE)
match = pattern.match(s)
name = match.group("name")
n1 = match.group("n1")
return (name, n1)
到目前为止,我的程序可以返回名称,但麻烦在此之后出现了。它们都有文本“SUCCESS Number of wins:”,所以我的想法是找到一种匹配这个文本的方法。但我意识到,我目前匹配精确子字符串的方法不正确。是否有一种方法可以将整个子字符串作为模式的一部分进行匹配?最近我一直在阅读正则表达式的相关内容,但没有找到类似的东西。我还是编程方面的新手,感谢任何帮助。
最终,我会使用float()将n1作为数字返回,但我省略了这一步,因为它现在无法正确找到数字,并且只会返回错误。
.*?
。?
使其成为惰性匹配,意味着它将尽可能少地匹配字符,因此如果以.*?
结尾,则不会匹配任何字符。要么在你的n1
组中去掉?
,要么在正则表达式末尾添加$
,这样它就会被强制匹配到行尾。 - Andrew Clark