如何通过python中的正则表达式获得价值?

时间:2017-02-06 06:34:19

标签: python regex

这是示例代码。

int myCodeVersion = 100;

我的.py代码如下。

fp = open(path, 'r').read()
myCodeVer = ''.join(map(str, re.findall('myCodeVersion'+ '\s=\s(.*?) ', fp))) 
print 'My Code version: ' + myCodeVer

这是我的.py代码

的结果
My Code version: 100;

我想只打印数字,如下所示。

My Code version: 100

如何修复我的正则表达式?

4 个答案:

答案 0 :(得分:2)

myCodeVer = ''.join(map(str, re.findall('myCodeVersion'+ '\s=\s(\d*)', fp))) 

答案 1 :(得分:2)

使用该特定文件,您可以这样做:

import re

with open(file, 'r') as f:
    myCodeVer = re.findall('(?<=myCodeVersion)(?:\s*=\s*)(\d+)', f.read())
    print 'My Code version: ' + myCodeVer[0]

输出:

My Code version: 100

正则表达式:

(?<=myCodeVersion) - 正面看待myCodeVersion

(?:\s*=\s*) - 非捕获组,=两侧有0个或更多空格

(\d+) - 捕获一个或多个数字

答案 2 :(得分:0)

这可行:

.*\s*=\s*(.*?);

答案 3 :(得分:0)

稍微更通用的方法是捕获群组。例如,我们可以使用pattern-matcher将变量类型,名称和值捕获为组,如下所示:

s = 'int myCodeVersion = 100;'
import re
# compile the regex pattern, if you need to use multiple times, it will be faster
pattern = re.compile(r"(int|float|double)\s+([A-Za-z][A-Za-z0-9_]+)\s*=\s*(\d+)\s*;") 
m = re.match(pattern, s)
print 'var type: ' + m.group(1)
print 'var name: ' + m.group(2)
print 'var value: ' + m.group(3)
#var type: int
#var name: myCodeVersion 
#var value: 100

对于您感兴趣的特定情况,可以使用相同的方法将代码简化为以下内容:

pattern = re.compile(r"int\s+myCodeVersion\s*=\s*(\d+)\s*;")
print 'My Code version: ' + ''.join(map(str, re.match(pattern, s).group(1))) 
# My Code version: 100