Saya memiliki string berikut:

someTxt="ABC -type X | aas < ISCO | ABB | TTI > kjhkjh"

Saya ingin mengubahnya menjadi berikut:

ABC -type X | aas &lt; ISCO \| ABB \| TTI &gt; kjhkjh

Saya mencoba melakukan ini dalam dua langkah (mungkin lebih baik dilakukan dalam satu langkah!), Sebagai berikut:

htmlTagTxt = re.sub(r'\<(.*)\>', r'&lt; \1 &gt;', someTxt)
print (htmlTagTxt)

Ini memberikan output berikut:

ABC -type X | aas &lt;  ISCO | ABB | TTI  &gt; kjhkjh

Sekarang saya ingin menambahkan garis miring terbalik sebelum '|' karakter.

cleanedHtmlTagTxt = re.sub(r'(\|)',, r'\\\1', htmlTagTxt)   
print (cleanedHtmlTagTxt)

Ini memberikan output berikut:

ABC -type X \| aas &lt;  ISCO \| ABB \| TTI  &gt; kjhkjh

Namun, saya hanya ingin menambahkan garis miring terbalik di mana '|' karakter ada di dalam < dan > Jadi yang pertama '|' karakter tepat setelah '-type X' tidak boleh diubah. Sayangnya, saya tidak mengerti sintaks yang diperlukan untuk menunjukkan ini. Adakah yang bisa menjelaskan bagaimana melakukan ini dan sedikit logika di baliknya?

2
didjek 20 November 2020, 20:49

1 menjawab

Jawaban Terbaik

IIUC, Anda bisa menggunakan kombinasi html escape dan regex melarikan diri:

from html import escape
import re

someTxt = "ABC -type X | aas < ISCO | ABB | TTI > kjhkjh"


def replacement(match):
    """This function escapes every | inside the string"""
    return re.sub(r"\|", re.escape("|"), match.group())


# change the text inside < and > using replacement
newText = re.sub(r"<.*?>", replacement, someTxt)

# use html escape to convert < > to &lt; &gt;
result = escape(newText)
print(result)

Keluaran

ABC -type X | aas &lt; ISCO \| ABB \| TTI &gt; kjhkjh
1
Dani Mesejo 20 November 2020, 18:07