Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中如何通过正则表达式获取值?_Python_Regex - Fatal编程技术网

在python中如何通过正则表达式获取值?

在python中如何通过正则表达式获取值?,python,regex,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 versio

这是示例代码

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

如何修复my regex?

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

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

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


(?对于该特定文件,您可以这样做:

import re

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

(?这可能会起作用:

.*\s*=\s*(.*?);
这可能会起作用:

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

一种更通用的方法是捕获组。例如,我们可以使用模式匹配器将变量类型、名称和值捕获为组,如下所示:

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

一种更通用的方法是捕获组。例如,我们可以使用模式匹配器将变量类型、名称和值捕获为组,如下所示:

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

Thx.但是删除空白
re.findall('mycdeversion\s*=\s*(\d+),fp)[0]
就足够了。事实上,
\d*
是错误的,必须至少是
\d+
。Thx.但是删除空白
re.findall('mycdeversion\s*=\s*(\d+),fp)[0]
就足够了。事实上,
\d*
是错误的,必须至少是
\d+。