这样的代码是正确的:
namespace cplusplus_primer {
class Sales_data { /*...*/ };
Sales_data operator+(const Sales_data&, const Sales_data&);
class Query {};
class Query_base {};
}
#include
#include
int main()
{
cplusplus_primer::Sales_data book; // 使用了命名空间
std::string str("hello"); // 使用了 std 命名空间
std::cout << str << std::endl;
return 0;
}
但我把这些文件放在命名空间中为何就是错的呢?
namespace cplusplus_primer {
#include
#include
class Sales_data { /*...*/ };
Sales_data operator+(const Sales_data&, const Sales_data&);
class Query {};
class Query_base {};
}
//#include
//#include
int main()
{
cplusplus_primer::Sales_data book; // 使用了命名空间
cplusplus_primer::std::string str("hello"); // 使用了 std 命名空间
cplusplus_primer::std::cout << str << cplusplus_primer::std::endl;
return 0;
}
有人知道这其中原因么
报什么错呢?
#include 应该放在命名空间之外吧,还有cplusplus_primer::std,std是一个已经在全局命名空间中存在的,他没被包含在cplusplus_primer里,应该在全局作用域中使用 std 命名空间吧
举例:例如将日志中所有的时间都去掉,并且去掉行尾是(RetVal:0)的行或者是替换成GO
re模块 常用的方法:
compile(pattern, flags = 0) 匹配任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象
match(pattern, string, flags = 0) 使用带有可选标记的正则表达式的模式来匹配字符串。如果匹配成功,返回匹配对象,否则返回None
search(pattern, string ,flags = 0) 使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功,则返回匹配对象,否则返回None
findall(pattern, string[,flags] ) 查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表
finditer(pattern, string[,flags] ) 与findall()相同,但返回的是一个迭代器。对于每一次匹配,迭代器都能返回一个匹配对象
split(pattern, string, max = 0) 根据正则表达式的模式分隔符,split函数将字符串分割为列表,返回匹配列表,分割最多操作max次
group(num = 0) 返回整个匹配对象,或者编号为num的特定子组
re.sub(pattern,repl,string,count,flags)
pattern:正则表达式中的模式字符串;rep原来字符串中要换的东西(既可以是字符串,也可以是函数);string:要被处理的,要被替换的字符串;count:匹配的次数,最多的次数flages:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等等
strip() strip()并不是一个真正意义上的替换函数,它是用来删除一些字符的,所以我们可以把这看作是把字符串中的一些字符替换成空
import re
class ReplaceStr:
def __init__(self,path):#path :文本路径
self.path=path
#先将需要修改的语句提取出来,如果没有匹配到则不修改(实际上是将文件中所有数据读出来,再重新写入)提取匹配到的字符串
def get_lines_sub(self,regex):#使用正则表达式匹配
f1 = open(self.path, encoding='GB18030')
line_list = f1.readlines()
length=len(line_list)
f2 = open(self.path, 'w+', encoding='GB18030')
n=0
for line in line_list:
list2 = re.findall(regex, line)
if list2:
f2.write(line)
else:
n+=1
if n==length:
for line in line_list:
f2.write(line)
f1.close()
f2.close()
def get_lines_str(self,str):#使用字符串匹配
f1 = open(self.path, encoding='GB18030')
line_list = f1.readlines()
length=len(line_list)
f2 = open(self.path, 'w+', encoding='GB18030')
n=0
for line in line_list:
if str in line:
f2.write(line)
else:
n+=1
if n==length:
for line in line_list:
f2.write(line)
f1.close()
f2.close()
#替换文本中符合条件的字符
def replace_str(self,regex,newstr=''):#regex :要替换的字符串,可以是正则表达式,newstr :替换后的字符串,默认为空
# path = input('请输入文本路径:')
# regex = input('请输入要替换的字符串,可以是正则表达式:')
# newstr = input('请输入要替换后的字符串,不输入视为空:')
f1=open(self.path,encoding='GB18030')
line_list=f1.readlines()
f2=open(self.path,'w+',encoding='GB18030')
for s_line in line_list:
tt=re.sub(regex,newstr,s_line)
print(tt)
f2.write(tt)
f1.close()
f2.close()
#将正则表达式匹配到的字符所在行替换为其他字符
def replace_line(self,regex,str): #输入两个参数,regex:要匹配的正则表达式 str:要替换的字符串
list1=[]
f1 = open(self.path, encoding='GB18030')
line_list = f1.readlines()
f2 = open(self.path, 'w+', encoding='GB18030')
for s_line in line_list:
list2=re.findall(regex,s_line)
if list2:
list1.append(str)
else:
list1.append(s_line)
for line in list1:
f2.write(line)
f1.close()
f2.close()
if __name__ == '__main__':
st = ReplaceStr(r'F:\KBaseserver备份\实时更新发布压力测试\日志\Kbase日志\205.1_1220.txt')
a = st.replace_line('\s\s\(RetVal:0\)','GO\n')
a = st.replace_str('(\d{4})-(\d{2})-(\d{2}),(\d{2}):(\d{2}):(\d{2})\s\[Message\]\s', '')