文字如下:
<CUSTOMER_ID COL_ID>="4000.01">79997/CUSTOMER_ID>
<CUSTOMER_ID COL_ID>="4000.01">799/CUSTOMER_ID>
我想得到&#34; 79997&#34;和&#34; 799&#34;
如何用Python做到这一点?
我在做PySpark来处理XML文件
答案 0 :(得分:0)
你可以使用re.findall使用积极的lookbehind断言:
s ='<CUSTOMER_ID COL_ID="4000.01">79997</CUSTOMER_ID><CUSTOMER_ID COL_ID="4000.01">799</CUSTOMER_ID>'
data = re.findall(r"(?<=>)(\d+)<",s)
print sum(map(int,data))
80796
查找d\+
一个或多个前面有>
后跟<
答案 1 :(得分:0)
如果您正在解析XML,那么您应该使用an XML parser。
例如,您可以阅读像这样的文件
<root>
<CUSTOMER_ID COL_ID="4000.01">79997</CUSTOMER_ID>
<CUSTOMER_ID COL_ID="4000.01">799</CUSTOMER_ID>
</root>
使用
import xml.dom.minidom
with open("test.xml") as f:
doc=xml.dom.minidom.parse(f)
result = []
for item in doc.getElementsByTagName("CUSTOMER_ID"):
result.append(item.firstChild.data)
给你
>>> result
['79997', '799']
答案 2 :(得分:0)
如果单词已知,则可以使用string.replace()方法:
s2 = s1.replace("foo1", "foo2")
将替换所有出现的&#34; foo1&#34;在s1中使用&#34; foo2&#34;并将结果存储在s2中。
对于您的特定场景,您可以用空字符串替换已知单词,然后将结果转换为整数:
#store string in s1
s1 = 'CUSTOMER_ID COL_ID="4000.01">79997</CUSTOMER_ID>'
#replace known strings with blank strings and cast result to integer, store value in s2
s2 = int(s1.replace('CUSTOMER_ID COL_ID="4000.01">', '').replace('</CUSTOMER_ID>', ''))
print s2
79997
我学会了最好在可能的情况下始终使用字符串方法,并避免潜入re模块,除非必要。