2016-12-06 67 views
-3

我有一個字符串,它具有大約270 M行,如下所示;python - 如何獲取字符串中出現多次的特定字符

<DOC> <DOC>+BDTag 
<S> <S>+BSTag 
--- ---- 
--- ---- 
</S> </S>+ESTag 
<S> <S>+BSTag 
--- ---- 
--- ---- 
</S> </S>+ESTag 
<S> <S>+BSTag 
--- ---- 
--- ---- 
</S> </S>+ESTag 
----- 

我想在所有的字符串<S> <S>+BSTag</S> </S>+ESTag之間的字符,並創建該列表。

你能給我一個最快解決方案的例子嗎?

謝謝,

回答

4

一個簡單的解決方案可以使用正則表達式。

例如使用re.findall我們可以寫,

>>> str = """<DOC> <DOC>+BDTag 
... <S> <S>+BSTag 
... hello world 
... </S> </S>+ESTag 
... <S> <S>+BSTag 
... line 2 
... </S> </S>+ESTag 
... <S> <S>+BSTag 
... line 3 
... </S> </S>+ESTag 
... -----""" 

>>> re.findall(r'<S> <S>\+BSTag(.*?)</S> </S>\+ESTag', str, re.DOTALL) 
['\nhello world\n', '\nline 2\n', '\nline 3\n'] 

它能做什麼?

  • <S> <S>\+BSTag匹配起始行。
  • (.*?).*匹配任何內容。 ?使其懶惰,以便它在看到第一個結束行時停止。
  • </S> </S>\+ESTag匹配端線
  • re.DOTALL這是可以確保.匹配新的生產線,以及。
相關問題