将变量插入正则表达式

时间:2019-02-01 02:56:11

标签: python regex

我正在尝试编写可从文本文件中的变量提取值的代码。

如果文件是
"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))

2 个答案:

答案 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>

Test regex

关于python代码,我不是你的家伙,对不起:(