2016-04-12 26 views
-4

Belirli bir sistemden bir günlük içeren bir çok büyük bir dizem var
Yalnızca <status> ile başlayan ve </status> ile biten parçayı istiyorum.
RegEx ifadesinin iyi bir yol olduğunu duydum, ancak bunu nasıl kullanacağımı gerçekten bilmiyorum.
Herhangi bir fikrin var mı?İki dizenin içine bir alt dizgi alın

+0

Durumdaki metinde ne yapmak istersiniz? – Sarcoma

+0

@sarcoma Kişisel kullanım için içine rastgele bir çizgi yazdırmak istiyorum –

+0

Sorunuzu bunu yansıtmak için güncellemelisiniz. – Sarcoma

cevap

3
s = "Hello I am a very long string <status>I've got a lovely bunch of coconuts</status> here they are standing in a row" 
excerpt = s.partition("<status>")[2].rpartition("</status>")[0] 
print excerpt 

Sonuç:

I've got a lovely bunch of coconuts 
+0

ile birden çok bölüm varsa, bu düzgün çalışmayabilir. 'Ancak bu, bu görevi gerçekleştirmenin en etkili yoludur (tüm metnin belleğe yüklendiği varsayılarak) –

0

<status> ve </status> yalnızca bir oluşum varsa, o zaman string_name[string_name.index("<status>") + 8: string_name.index("</status>"] kullanabilirsiniz.

s = "test<status>test2</status>" 
print s[s.index("<status>") + 8: s.index("</status>"] 

Çıktı:

test2 
1

Eğer regex denemek isterseniz, buraya bir yolu şudur:

import re 

regex = re.compile(r"\<status\>(.*?)\</status\>", re.IGNORECASE) 
s = """This is some long random text <status>This is the first status block</status> 
and some more text <status>and another block</status> 
and yet more <status>This is the last status block</status>""" 
print(re.findall(regex, s)) 

verimleri

['This is the first status block', 'and another block', 'This is the last status block'] 

Demo

Bu yöntemin en önemli avantajı, bir çizgi üzerinde tüm<status>...</status> blok değil, sadece ilk özler olmasıdır. Üç tırnak işaretli dizeler için, <status> ve </status>'un aynı satırda olması gerektiğini unutmayın.

İlgili konular