我有一个很长的文本,其中包含一些稀疏隐藏的信息。每一条隐藏的信息都被放置在关键字之间(让我们称之为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>@
画空白并不是那么容易,所以请看下图进一步说明:
。
感谢您的评分
1条答案
按热度按时间h7appiyu1#
您可以否定查找之前找到的内容的存在,例如其他重复的“@9>”。这很可能会收集你的比赛。
正则表达式说明:
(?<=(?!@9> |@9>@9>)@9>)
:positive lookbehind of...(?!@9> |@9>@9>)
:既不是“@9>“,也不是“@9>@9>”@9>
:但正好是“@9>”.+?
:延迟匹配所需信息(?=>9@)
:“>9@”的正向前看查看演示here。