其他教程

其他教程

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, re

def 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, re

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()

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