【发布时间】:2019-07-03 17:57:46
【问题描述】:
我在.tsv 文件中有一系列制表符分隔的 html sn-ps。这是其中一个 sn-ps 的示例:
<li>
<p>Create a list of letters, <code>lst</code> from the string <code>strng = "abc"</code>.</p>
<ul>
<li>Use the list constructor, <code>list()</code>, to create a list from a string.</li>
</ul>
<pre>
<code class='language-python' lang='python'>
strng = "abc"
lst = list(a)
#lst = ['a', 'b', 'c']
</code>
</pre>
</li>
我想在<pre> <code class='language-python' lang='python'> 和</code> </pre> 标签之间用换行符<br> 替换换行符\n,only,使用正则表达式和@987654330 @。
我尝试创建以下正则表达式来匹配所需的换行符:
(?<=<pre><code)\r\n?|\n(?<=</pre></code>)
但是,上面的正则表达式不匹配来自 sn-p 的任何换行符。虽然,如果我删除积极的后视,那么正则表达式 确实 匹配我需要的换行符(至少对于我在这篇文章中显示的 sn-p,a;虽然那不会对所有输入都为真)。
(?<=<pre><code)\r\n?|\n
能否在所有可能的 sn-ps 中捕获标签之间的所有换行符:<pre> <code class='language-python' lang='python'> 和 </code> </pre> 的正则表达式?
编辑:这些 sn-ps 不使用“完整”html。它们实际上是要导出到抽认卡应用程序mnemosyne。这些 sn-ps 中的每一个都代表一个抽认卡,它始终具有相同的受控 html 结构(由我定义)。因此,在这种情况下使用正则表达式不会有任何后果。此外,mnemosyne 使用的 html 渲染器不会在<pre> 标签内换行,所以我尝试使用<br> 手动进行。
【问题讨论】:
-
为什么不使用 xml 解析器?
-
请不要这样做(用正则表达式解析 HTML)! You'll summon TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡。用BeautifulSoup之类的解析,修改你关心的元素里面的文字。
-
所以我要问人们不喜欢的问题:为什么,鉴于
<pre>通常可以完成这项工作?这是否是您真正的问题是摆脱常见缩进的解决方法的一部分? -
这些 sn-ps 不使用“完整”html。它们实际上只是要导出到抽认卡应用程序mnemosyne 的文件。这些 sn-ps 中的每一个都代表一个抽认卡,它始终具有相同的受控 html 结构(由我定义。)因此,在这种情况下使用正则表达式不会有任何后果。
-
@David:当然,作为介绍问题的简短句子,它不会有什么坏处:)