我正在尝试编写可从文本文件中的变量提取值的代码。
如果文件是
"bob= 1255 mike = 13"
当我将bob指定为var_name
时,它将提取1255
,依此类推。
我的代码基于this,但似乎不起作用
var_name = 'bob'
regexp = re.compile(r''+var_name+'.*?([0-9.-]+)')
with open("textfile") as s:
for line in s:
match = regexp.match(line)
if match:
print(match.group(1))
var_name = 'mike'
regexp = re.compile(r''+var_name+'.*?([0-9.-]+)')
with open("textfile") as s:
for line in s:
match = regexp.match(line)
if match:
print(match.group(1))
答案 0 :(得分:1)
您正在使用re.match
,它仅在字符串的开头查找内容(而mike
不在字符串的开头)。使用re.search
,它可以在任何位置查找东西。
有点题外话:请注意r'...'
并不表示“ regexp文字”。它的意思是“原始字符串文字”。其目的是避免必须在字符串内部转义反斜杠。现在,''
很明显不包含任何反斜杠,因此r''
与''
完全没有区别。另一方面,.*?([0-9.-]+)
非常复杂,因此我们不确定其中是否存在(或将要存在)任何反斜杠-但您并未将其变成原始字符串文字。令人费解。 :)如果没有没用的var_name + r'.*?([0-9.-]+)'
...
r'' +
答案 1 :(得分:0)
您没有提到什么有效/什么无效。
您应该使用.*?
而不是\s*=\s*
。否则,您可能会抓到#edsakjj*kjn
之类的东西-我认为您不希望这样做。
您还可以确保该数字实际上是一个数字:-?\d+(\.?\d+)?
:可选-(减号,表示负数),必填数字,或者可选:小数点后跟数字。 / p>
关于python代码,我不是你的家伙,对不起:(