regex 以非贪婪方式匹配特定字符串之间出现的所有文本

vuktfyat  于 2023-05-30  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个很长的文本,其中包含一些稀疏隐藏的信息。每一条隐藏的信息都被放置在关键字之间(让我们称之为string1和string2)。我正试图提出一个正则表达式(Python中),它将一次给予我所有隐藏的消息。让我给予一个例子来说明:
假设我们有文本:

Hello @9>ruur>9@ dafa  @9>ruerur>9@ @>ru@9>ruour>9@ur>@, @9>   @9>  @9> @9>@9>opp>9@@9>@9>iiiii>9@@9>@9>@9>@9> >9@>9@>9@>9@9>9@9>@

关键字是string1 = "@9>"string2 = ">9@"。然后正则表达式应该匹配以下内容(粗体字体或粗体下划线):

Hello @9>**ruur**>9@ dafa  @9>**ruerur**>9@ @>ru@9>**ruour**>9@ur>@, @9>   @9>  @9> @9>@9>**opp**>9@@9>@9>**iiiii**>9@@9>@9>@9>@9>**_**>9@>9@>9@>9@9>9@9>@"

请注意非贪婪行为,即。在任何情况下,匹配都不应该包含string1或string2,无论它们之间发生了什么。如果我只想匹配长度为n或更长的消息,该如何修改正则表达式?
我展示了我迄今为止最好的尝试:
这个正则表达式几乎完成了这项工作:r"@9>((?!@9>).*?)>9@"但不完全是数学:

Hello @9>**ruur**>9@ dafa  @9>**ruerur**>9@ @>ru@9>**ruour**>9@ur>@, @9>___**@9>**__**@9> @9>@9>opp**>9@@9>@9>**iiiii**>9@@9>@9>@9>@9>**_**>9@>9@>9@>9@9>9@9>@

画空白并不是那么容易,所以请看下图进一步说明:



感谢您的评分

h7appiyu

h7appiyu1#

您可以否定查找之前找到的内容的存在,例如其他重复的“@9>”。这很可能会收集你的比赛。

(?<=(?!@9> |@9>@9>)@9>).+?(?=>9@)

正则表达式说明

  • (?<=(?!@9> |@9>@9>)@9>):positive lookbehind of...
  • (?!@9> |@9>@9>):既不是“@9>“,也不是“@9>@9>”
  • @9>:但正好是“@9>”
  • .+?:延迟匹配所需信息
  • (?=>9@):“>9@”的正向前看

查看演示here

相关问题