Products
GG网络技术分享 2025-03-18 16:15 0
工作需要在文本中,查找指定的内容,输出到其他文本。
import os, re
with open (r'C:\\Users\\tjing\\Desktop\\python\\st.txt','r+') as f:
Keystart='ONOFFLINE : ON LINE ' Keyend='Warning:Site-01, ### remote_fetch(cim_TestResult) ### errr!!!' buff = f.read()
pat = re.compile(Keystart+'(.*?)'+Keyend, re.S)
result = pat.findall(buff)
print (result)
附上相关文档
[GPIB]W: (BINON:11111111,11111111,11111111,11111111,11111111,11111111,1111111A,11111A11,11111111,1111111A,1111111A,111A111A,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11A11111,111A1111,A1111111,111111A1,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,1111111A,11111111,11111111,11111A11,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111;
ONOFFLINE : ON LINE
Hello, python!
Warning:Site-01, ### remote_fetch(cim_TestResult) ### errr!!!
[GPIB]W: (BINON:11111111,11111111,11111111,11111111,11111111,11111111,1111111A,11111A11,11111111,1111111A,1111111A,111A111A,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11A11111,111A1111,A1111111,111111A1,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111,1111111A,11111111,11111111,11111A11,11111111,11111111,11111111,11111111,11111111,11111111,11111111,11111111;
结果一直是空的。
尝试用正则表达式匹配指定内容。
能够读取相应始末位置间的内容。
这应该就是你想要的功能:
import os, redef GetMiddleStr(content,startStr,endStr):
'''提取字符串content当中,startStr与endStr之间的内容
''' startIndex = content.index(startStr)
if startIndex>=0:
startIndex += len(startStr)
endIndex = content.index(endStr)
return content[startIndex:endIndex]
with open (r'C:\\Users\\tjing\\Desktop\\python\\st.txt','r+') as f:
Keystart=r'ONOFFLINE : ON LINE' Keyend=r'Warning:Site-01, ### remote_fetch(cim_TestResult) ### errr!!!' buff = f.read()
result = GetMiddleStr(buff,Keystart,Keyend)
result = result.strip() # 清除前后的换行符 print(result)
或者可以将你的源代码改为如下代码:
import os, rewith open (r'C:\\Users\\tjing\\Desktop\\python\\st.txt','r+') as f:
Keystart=r'ONOFFLINE : ON LINE' # 将()写为\\(\\),因为要匹配这个符号本身 Keyend=r'Warning:Site-01, ### remote_fetch\\(cim_TestResult\\) ### errr!!!' buff = f.read()
pat = re.compile(Keystart+r'(.*?)'+Keyend, re.S)
result = pat.findall(buff)
print(result)
你的代码没能正确匹配的原因是,Keyend字符串内有英文括号,这在正则表达式里面是特殊符号。
我建议使用第一种方法,这样,各种特殊符号都不需要特殊处理。
觉得有帮助请采纳本答案,谢谢哦!
问题原因是在于你的Keyend中有(cim_TestResult) ,Keyend这个字符串里只要不包含(cim_TestResult),都能匹配成功并输出对应内容。
貌似涉及到了转义和原生字符问题。或者可以在 '(' ')' 前添加
Keyend='Warning:Site-01, ### remote_fetch(cim_TestResult) ### errr!!!'
说了那么多,你的示例呢?
Demand feedback