2016-12-05 48 views
-2

從一個文件,我已經得到的字符串,如:插入HTML標籤標到一個文本公式

4f^145d^66s^2 

我必須格式化與HTML <sup>標籤:

4f<sup>14</sup>5d<sup>6</sup>6s<sup>2</sup> 

,以便它會呈現爲:4F 5D 6S

這是一個示例,我必須格式化數百個,因此,手動執行操作是不可能的。

我要做的是用<sup>替換^(這不是問題); **找到下一個[a-z],並在此之前插入</sup>一位數字**(這是有問題的部分),或者在字符串的末尾。

我該怎麼做?

+0

我不知道指數的哪部分是數字。我所知道的是,格式是: [0-9] [a-z] [指數] [0-9] [a-z] [指數]。我知道[0-9]有單個數字,但指數部分可能是1或2位數字。 那就是爲什麼,我正在嘗試用粗體字來表達我所說的。 alpha **之前的**一位很重要 – BaRud

回答

0

如果除了信前的最後所有的數字是指數的一部分,那麼你可以使用正則表達式:

re.sub(r'\^(\d+)(?=\d[a-z]|$)', r'<sup>$1</sup>', formula) 

這個任意數量的^字符後的數字相符,但贏得了」 t包括信件前的最後一位數字。 (?=...)部分是預讀表達式;它只匹配輸入中下一個字符後面跟一個字母的位置,即字符串的末尾。這可以讓您匹配^145d中的^14,而不包括5d

演示:

>>> import re 
>>> formula = '4f^145d^66s^2' 
>>> re.sub(r'\^(\d+)(?:\d[a-z]|$)', r'<sup>\1</sup>', formula) 
'4f<sup>14</sup>5d<sup>6</sup>6s<sup>2</sup>' 

您還可以表達與this regex101.com demo換人玩。