[英]substring extract in a file using Python Regex
文件在逻辑定义的字符串块中具有n行。 我正在解析每一行并根据一些匹配条件捕获所需的数据。
我已阅读每一行并使用以下代码查找块:
#python
for lines in file.readlines():
if re.match(r'block.+',lines)!= None:
block_name = re.match(r'block.+', lines).group(0)
# string matching code to be added here
输入文件:
line1 select KT_TT=$TMTL/$SYSNAME.P1
line2 . $dhe/ISFUNC sprfl tm/tm1032 int 231
line3 select IT_TT=$TMTL/$SYSNAME.P2
line4 . $DHE/ISFUNC ptoic ca/ca256 tli 551
.....
.....
line89 CALLING IK02=$TMTL/$SYSNAME.P2
line90 CALLING KK01=$TMTL/$SYSNAME.P1
每个步骤的匹配条件和预期输出:
最终输出应该是这样的
FUNC SYS CALL
tm1032 int 231 $SYSNAME.P1 KK01
ca256 tli 551 $SYSNAME.P2 IK02
如果您只需要最后一个斜杠旁边的文本,则根本不需要使用正则表达式。
只需在每一行上使用.split("/")
就可以得到斜杠旁边的最后一部分
sample = "$dhe/ISFUNC sprfl tm/tm1032 int 231"
sample.split("/")
会导致
['$dhe', 'ISFUNC sprfl tm', 'tm1032 int 231']
然后使用-1索引来访问列表的最后一个元素以获取值
PS:找到相应的行后使用拆分功能
在读取行时,匹配单词“/ ISFUNC”并从最后一个字符中取出字符,直到它与“/”匹配,并将其保存到变量中。 预期o / p-> tm1032 int 231(在第2行中找到匹配的字符串)
char_list = re.findall(r'/ISFUNC.*/(.*)$', line)
if char_list:
chars = char_list[0]
找到ISFUNC后,读取前一行并从该行获取数据,从最后一个字符开始,直到与“/”匹配,并将其保存到变量中。 预期o / p - > $ SYSNAME.P1(第1行)
这里理想的方法是(a)迭代列表索引而不是行本身(即for i in range(len(file.readlines()): ... file.readlines()[i]
)或( b)维护最后一行的副本(比如,在for循环的末尾放置last_line = line
。然后,引用该表达式的最后一行:
data_list = re.findall(r'/([^/]*)$', last_line)
if data_list:
data = data_list[0]
继续读取这些行并查找以“CALLING”开头的行,“/”后的最后一个字符串应与步骤2的o / p匹配($ SYSNAME.P1)。 只需在CALLING字后捕获数据并保存即可。 预期o / p - > KK01(第90行)
假设,从您的示例中,您的意思是“只是紧跟在之后的数据(即直到等号):
calling_list = re.findall(r'CALLING(.*)=.*/' + re.escape(data) + '$', line)
if calling_list:
calling = calling_list[0]
您可以移动括号以更改要从该行捕获的内容。 re.findall()
将输出匹配列表,仅包括匹配的括号内的位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.