Python,如何在两个已知单词之间获取子串

时间:2014-08-15 16:46:54

标签: python string

文字如下:

<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文件

3 个答案:

答案 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模块,除非必要。