В попытке преобразовать файл md
в html
я использую это регулярное выражение для замены всех соответствующих кодов, заканчивающихся на \n
на \n\t
. Проблема заключается в его соответствии при использовании search()
, но не при использовании sub()
. Нужна помощь.
import markdown2
import re
code_text = """* But why did the `is` operator evaluated to `False`? Let's see with this snippet.
```py
class WTF(object):
def __init__(self): print("I ")
def __del__(self): print("D ")
```
**Output:**"""
print("PROBLEM :: \n", markdown2.markdown(code_text))
pattern = re.compile(r"```py(?P<code>.*?)```", re.DOTALL)
code_only = pattern.search(code_text).group("code")
code_only = code_only.replace("\n", "\n\t")
print("SOLUTION 1:: \n", markdown2.markdown(code_only))
###################################################
# Replacing all code occurrences in the given string
code_only = pattern.sub(lambda m: (m.group("code")).replace("\n", "\n\t"), code_text)
print("SOLUTION 2:: \n", markdown2.markdown(code_only))
ВЫХОД:
PROBLEM ::
<ul>
<li><p>But why did the <code>is</code> operator evaluated to <code>False</code>? Let's see with this snippet.
<code>py
class WTF(object):
def __init__(self): print("I ")
def __del__(self): print("D ")
</code></p>
<p><strong>Output:</strong></p></li>
</ul>
SOLUTION 1::
<pre><code> class WTF(object):
def __init__(self): print("I ")
def __del__(self): print("D ")
РЕШЕНИЕ 2 ::
Попробуйте изменить code_text
на
```py
>>> a = "some_string"
>>> id(a)
140420665652016
>>> id("some" + "_" + "string") # Notice that both the ids are same.
140420665652016
```
### This is a heading
```py
print("Hello World")
```
работает отлично.
ВЫХОД:
PROBLEM ::
<p>```py</p>
<blockquote>
<blockquote>
<blockquote>
<p>a = "some<em>string"
id(a)
140420665652016
id("some" + "</em>" + "string") # Notice that both the ids are same.
140420665652016
```</p>
<h3>This is a heading</h3>
</blockquote>
</blockquote>
</blockquote>
<p><code>py
print("Hello World")
</code></p>
SOLUTION 1::
<pre><code>>>> a = "some_string"
>>> id(a)
140420665652016
>>> id("some" + "_" + "string") # Notice that both the ids are same.
140420665652016
РЕШЕНИЕ 2 ::
>>> a = "some_string"
>>> id(a)
140420665652016
>>> id("some" + "_" + "string") # Notice that both the ids are same.
140420665652016
Это заголовок
print("Hello World")
РЕДАКТИРОВАТЬ 1
Пробовал с использованием Pypi markdown
ВЫХОД:
PROBLEM ::
<ul>
<li><p>But why did the <code>is</code> operator evaluated to <code>False</code>? Let's see with this snippet.
<code>py
class WTF(object):
def __init__(self): print("I ")
def __del__(self): print("D ")
</code></p>
<p><strong>Output:</strong></p></li>
</ul>
SOLUTION 1::
<pre><code> class WTF(object):
def __init__(self): print("I ")
def __del__(self): print("D ")
РЕШЕНИЕ 2 ::
Выход:
РЕДАКТИРОВАТЬ 2:
sub()
работает нормально. Я только подтвердил это, но так как код уже имел \n\t
в конце каждой строки, поэтому после запуска он стал \n\t\t
, и теперь markdown()
не работает.