python - 需要 REGEX 帮助返回关键字之间的多行

标签 python regex string multiline

我纠结了两天,终于敢问了。

这是我的数据(文件):

EXH;2;20180514103023+00;
TSH;FI__REPLACEMGA_LOS_92_12345;1;1;HOUR;kWh;24;201805120000+00;201805130000+00;LOS_92_12345;;;;;;LOS_92_12345;;;
TSV;1;201805120000+00;0.000000;Z01;
TSV;2;201805120100+00;0.000000;Z01;
TSV;3;201805120200+00;0.000000;Z01;
TSH;FI__REPLACEMGA_LOS_93_12345;1;1;HOUR;kWh;24;201805120000+00;201805130000+00;LOS_93_12345;;;;;;LOS_93_12345;;;
TSV;1;201805120000+00;0.000000;Z01;
TSV;2;201805120100+00;0.000000;Z01;
TSV;3;201805120200+00;0.000000;Z01;
TSV;4;201805120300+00;0.000000;Z01;
TSH;FI__REPLACEMGA_LOS_96_12345;1;1;HOUR;kWh;24;201805120000+00;201805130000+00;LOS_96_12345;;;;;;LOS_96_12345;;;
TSV;1;201805120000+00;0.000000;Z01;
TSV;2;201805120100+00;0.000000;Z01;
TSV;3;201805120200+00;0.000000;Z01;
TSV;4;201805120300+00;0.000000;Z01;
TSH;FI__REPLACEMGA_LOS_97_12345;1;1;HOUR;kWh;24;201805120000+00;201805130000+00;LOS_97_12345;;;;;;LOS_97_12345;;;
TSV;1;201805120000+00;0.000000;Z01;
TSV;2;201805120100+00;0.000000;Z01;
TSV;3;201805120200+00;0.000000;Z01;
TSV;4;201805120300+00;0.000000;Z01;
EXT;

我想从正则表达式中获取 4 个 block (4 个匹配项),例如:

TSH;FI__REPLACEMGA_LOS_92_12345;1;1;HOUR;kWh;24;201805120000+00;201805130000+00;LOS_92_12345;;;;;;LOS_92_12345;;;
TSV;1;201805120000+00;0.000000;Z01;
TSV;2;201805120100+00;0.000000;Z01;
TSV;3;201805120200+00;0.000000;Z01;

在每场比赛中,我都会应用一些进一步的正则表达式。但目前,我无法创建正则表达式来返回这些匹配项。

这是我尝试过的:

(TSH;FI(?:.*?\r?\n?)*(?<=TSH;))+

但是这个仅返回 2 个匹配项(每秒),可能是因为它消耗了每个“TSH;”比赛结束后的区 block 。

(TSH;(?:.*?\r?\n?)*)+(?<=\nTSH;)

这个发现了 4 个“TSH;”但不是完整的 block 。

需要帮助:) 附:将在Python中使用

最佳答案

您可以使用以下模式:

(?s)^TSH;.*?Z01;(?=\nTSH|\nTSV;4)
  • (?s) re.DOTALL 选项。
  • ^TSH; 匹配字符串开头的子字符串 TSH;
  • .*? 延迟匹配任何内容。
  • Z01; 匹配子字符串 Z01;
  • (?=\nTSH|\nTSV;4)TSHTSV;4 的正向前瞻。

您可以现场尝试 here .

在Python中你可以使用:

print(re.findall(r'^TSH;.*?Z01;(?=\nTSH|\nTSV;4)',mystr,re.DOTALL|re.MULTILINE))

关于python - 需要 REGEX 帮助返回关键字之间的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51856781/

相关文章:

c - printf 浮点值的字符串格式

Python:如何计算句子中的pos标签?

python - 在Django-mssql中运行syncdb时SQL插入编译器错误

java - 我如何替换replaceAll中符号后的字母/数字

c# - 如何在 C# 中将正则表达式设置为 MaskedTextBox 的掩码?

c - 从函数返回指针数组

python - 使用系列中的字符串检查 pandas 中的 str.contains

python - 错误提示而不是提示重新输入输入

python - 无法获取 json 中的资源,因为结构中使用了保留代码字

javascript - Visual Studio 警告这个正则表达式的语法怎么样?