从文件中获取并格式化字符串

时间:2012-08-07 19:33:37

标签: python regex io

我想在字符串idname中找到特定的两个单词,我认为使用正则表达式,但我无法格式化。

在文件中我有:

<p>Any text, bla bla lorem ipsum, bla bla</p>
<p>test = {"player":{"id":"123123","name":"f_teste"};

这是我的进步:

import re

def main():
    padrao = r'"id"\w+'

    caminho = 'D:\index.txt'
    arquivo = open(caminho,'r')
    texto = arquivo.readlines()[1].split('{')

    textoEncontrado = texto[2].split(',')

    print textoEncontrado[0]
    print textoEncontrado[1]

    arquivo.close()


if __name__ == '__main__':
    main()

结果:

"id":"123123"
"name":"f_teste"};

我想要的是什么:

id: 123123
name = f_teste

当我尝试使用RE只得到字符串id时,我得到了:

padrao = r'^id$'
(...)
result = re.findall(padrao,textoEncontrado[0])
    print result
(...)

结果是[]

抱歉英文不好。 谢谢大家。 :)

1 个答案:

答案 0 :(得分:2)

如果您的输入是包含json文本的有效html:

>>> from bs4 import BeautifulSoup
>>> html = """<p>Any text, bla bla lorem ipsum, bla bla</p>
... <p>test = {"player":{"id":"123123","name":"f_teste"}};"""
>>> soup = BeautifulSoup(html)
>>> import  re
>>> jsonre = re.compile(r'test\s*=\s*(.*);', re.DOTALL)
>>> p = soup('p', text=jsonre)[0]
>>> json_text = jsonre.search(p.get_text()).group(1)
>>> import json
>>> json.loads(json_text)
{u'player': {u'id': u'123123', u'name': u'f_teste'}}

要安装bs4,请运行:pip install beautifulsoup4

正则表达式解决方案如下:

>>> re.findall(r'"(id)":"([^"]*)","(name)":"([^"]*)"', html)
[('id', '123123', 'name', 'f_teste')]