这是示例代码。
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
如何修复我的正则表达式?
答案 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