【发布时间】:2011-09-16 16:31:54
【问题描述】:
我有一些行代表文本文件中的一些数据。它们都是以下格式:
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组删除?,要么在正则表达式的末尾添加$,以便强制匹配到行尾。 -
删除 ?在 n1 组结束时成功了!非常感谢。我必须牢记这一点,从现在开始要更加小心。
标签: python regex substring match