查找xml标记并用python替换标记名

查找xml标记并用python替换标记名,python,xml,regex,python-2.7,beautifulsoup,Python,Xml,Regex,Python 2.7,Beautifulsoup,我正在解析的kml文件: 我正在查找与此正则表达式匹配的所有标记(\d+\@.*.\),然后操作标记的文本 下面是我用来测试正则表达式的代码: import re from bs4 import BeautifulSoup #Open the KML file. xmldoc = open('doc.kml', "r+") soup = BeautifulSoup(xmldoc, "xml") p = re.compile(r"\<name\>(\d+ \@.*)\<\/n

我正在解析的kml文件:

我正在查找与此正则表达式匹配的所有
标记(\d+\@.*.\),然后操作标记的文本

下面是我用来测试正则表达式的代码:

import re
from bs4 import BeautifulSoup

#Open the KML file.
xmldoc = open('doc.kml', "r+")
soup = BeautifulSoup(xmldoc, "xml")

p = re.compile(r"\<name\>(\d+ \@.*)\<\/name\>")

result = re.findall(p, soup)

print result
重新导入
从bs4导入BeautifulSoup
#打开KML文件。
xmldoc=open('doc.kml',“r+”)
soup=BeautifulSoup(xmldoc,“xml”)
p=重新编译(r“\(\d+\@.*.\”)
结果=关于findall(p,汤)
打印结果
我得到以下错误:

Traceback (most recent call last):
File ".\regex_test.py", line 10, in <module>
result = re.findall(p, soup)
File "C:\Python27\lib\re.py", line 177, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
回溯(最近一次呼叫最后一次):
文件“\regex_test.py”,第10行,在
结果=关于findall(p,汤)
文件“C:\Python27\lib\re.py”,第177行,findall中
返回编译(模式、标志).findall(字符串)
TypeError:应为字符串或缓冲区

我做错了什么?

将正则表达式传递给以下参数:

它打印:

<kml:name>13233 @ 2014-05-19 21:35:30 GMT (ACPU)</kml:name>
<kml:name>13233 @ 2014-05-19 21:36:30 GMT (ACPU)</kml:name>
<kml:name>13233 @ 2014-05-19 21:37:30 GMT (ACPU)</kml:name>
...
<kml:name>13233 @ 2014-05-19 22:28:30 GMT (ACPU)</kml:name>
13233@2014-05-19 21:35:30格林尼治标准时间(ACPU)
13233@2014-05-19 21:36:30格林尼治标准时间(ACPU)
13233@2014-05-19 21:37:30格林尼治标准时间(ACPU)
...
13233@2014-05-19 22:28:30格林尼治标准时间(ACPU)

感谢您的回溯!问题是您正在向正则表达式传递一个
soup
对象,而不是一个字符串(或缓冲区),我不知道您可以这样做!美丽的小组真的很漂亮。@alecxe这是不是让我们一天问这么多次同样的问题?=)@是的,强烈的似曾相识的感觉:)你不需要逃避
@
,但你已经知道了=)@AdamSmith是的,它让这道“汤”如此美丽可口:)
<kml:name>13233 @ 2014-05-19 21:35:30 GMT (ACPU)</kml:name>
<kml:name>13233 @ 2014-05-19 21:36:30 GMT (ACPU)</kml:name>
<kml:name>13233 @ 2014-05-19 21:37:30 GMT (ACPU)</kml:name>
...
<kml:name>13233 @ 2014-05-19 22:28:30 GMT (ACPU)</kml:name>