уценка не работает для дополнительных пробелов? - PullRequest
0 голосов
/ 26 июня 2018

В попытке преобразовать файл 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 ::
  • Но почему оператор is оценивается как False? Давайте посмотрим с этим фрагментом.

    класс WTF (объект): def init (self): print ("I") def del (self): print ("D")

    Выход:

Попробуйте изменить 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>&gt;&gt;&gt; a = "some_string"
&gt;&gt;&gt; id(a)
140420665652016
&gt;&gt;&gt; id("some" + "_" + "string") # Notice that both the ids are same.
140420665652016
РЕШЕНИЕ 2 ::
&gt;&gt;&gt; a = "some_string"
&gt;&gt;&gt; id(a)
140420665652016
&gt;&gt;&gt; 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 ::
  • Но почему оператор is оценивается как False? Давайте посмотрим с этим фрагментом.

    класс WTF (объект): def init (self): print ("I") def del (self): print ("D")

Выход:

РЕДАКТИРОВАТЬ 2:

sub() работает нормально. Я только подтвердил это, но так как код уже имел \n\t в конце каждой строки, поэтому после запуска он стал \n\t\t, и теперь markdown() не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...