从字符串中获取一个数字并使用它来替换Python中的文本

时间:2015-06-26 13:52:15

标签: python regex

我的文本文件行中有一个字符串,例如:

<img title="\frac{3}{8}" src="http://latex.codecogs.com/gif.latex?\dpi{50}&amp;space;\fn_phv&amp;space;\frac{3}{8}" alt="" />

基本上它包含一个分数的html代码。但现在我想用以下内容替换它:

<sup>3</sup>&frasl;<sub>8</sub>

所以应该使用“\ frac {3} {8}”这个词,并相应地替换每一行。 “\ frac {3} {8}”这个词也会相应改变。

我知道我需要使用正则表达式,但需要指导才能做到这一点。

我的代码:

with open('/Users/cnnlakshmen/Downloads/qz_question.sql', 'r') as fin:
    filedata = fin.read()

filedata1 = re.sub(r'<img\b[^<]*(?<=title=")\\frac\{(\d+)\}\{(\d+)\}"[^<]*>', "<sup>\g<1></sup>&frasl;<sub>\g<2></sub>", filedata)
print filedata1

# Write the file out again
with open('/Users/cnnlakshmen/Downloads/qz_question1.sql', 'w') as fin:
  fin.write(filedata1)

2 个答案:

答案 0 :(得分:0)

假设数字是正整数

pattern = '\\frac\{(\d+)\}\{(\d+)\}'

或者对于正/负,整数和小数

pattern = '\\frac\{(-?\d+\.?[\d?]*)\}'

replaceWith: '<sup>\1</sup>&frasl;<sub>\2</sub>'

import re
regex = re.compile(pattern)
re.sub(regex, replaceWith, inputString)

答案 1 :(得分:0)

您可以使用

替换整个img代码
<img\b[^<]*\btitle="\\frac\{(\d+)\}\{(\d+)\}"[^<]*>

替换为

<sup>\1</sup>&frasl;<sub>\2</sub>

请参阅demo

IDEONE demo

import re
p = re.compile(r'<img\b[^<]*\btitle="\\frac\{(\d+)\}\{(\d+)\}"[^<]*>')
test_str = "<img title=\"\\frac{3}{8}\" src=\"http://latex.codecogs.com/gif.latex?\dpi{50}&amp;space;\\fn_phv&amp;space;\\frac{3}{8}\" alt=\"\" />"
subst = "<sup>\g<1></sup>&frasl;<sub>\g<2></sub>"
print re.sub(p, subst, test_str)