簡體   English   中英

Python,如何獲取兩個已知單詞之間的子字符串

[英]Python, how to get substring between two known words

文字是這樣的:

<CUSTOMER_ID COL_ID>="4000.01">79997/CUSTOMER_ID>

<CUSTOMER_ID COL_ID>="4000.01">799/CUSTOMER_ID> 

我想獲取數字“ 79997”和“ 799”

如何在Python中做到這一點?

我在做PySpark來處理XML文件

您可以使用肯定的后置斷言使用re.findall

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\\+一個或多個數字,其后跟一個> ,后跟一個<

如果要解析XML,則應使用XML解析器

例如,您可以讀取這樣的文件

<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']

如果單詞是已知的,則可以使用string.replace()方法:

s2 = s1.replace("foo1", "foo2")

將用“ foo2”替換s1中所有出現的“ foo1”並將結果存儲在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模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM