2017-07-11 15 views
5

aşağıdaki metnipiton tırnak ve boşluklarla metni bölmek

text = 'This is "a simple" test' 

var Ve ben sonuçlanan ilk tırnak ve sonra boşluklarla, iki şekilde bölmek gerekir:

res = ['This', 'is', '"a simple"', 'test'] 

Ama str.split() ile sadece tırnak işaretleri veya boşlukları kullanabiliyorum. Çoklu sınırlayıcılar için yerleşik bir işlev var mı? olmayan POSIX modunda Bunu yapmak

>>> import shlex 
>>> text = 'This is "a simple" test' 
>>> shlex.split(text, posix=False) 
['This', 'is', '"a simple"', 'test'] 

bölünmüş sonucundan iç tırnak kaldırılmasını engeller:

cevap

8

Sen alıntı dizeleri ayrıştırma için kullanışlı shlex.split kullanabilirsiniz.

>>> shlex.split(text) 
['This', 'is', 'a simple', 'test'] 

metnin bu tip birden fazla satır varsa veya akışından okuyorsanız, verimli (çıktıda tırnak hariç) ayırabilirsiniz csv.reader kullanarak: posix varsayılan olarak True olarak ayarlanır

import io 
import csv 

s = io.StringIO(text.decode('utf8')) # in-memory streaming 
f = csv.reader(s, delimiter=' ', quotechar='"') 
print list(f) 
# [['This', 'is', 'a simple', 'test']] 

Python 3, tüm dizeleri zaten unicode olarak unicode dize deşifre etmek gerekmez ise .

1

Sizin durumunuz için shlex.split sadece iyi olacak. Seni doğru anladıysam

olarak cevap multiple delimiters?

import re 

re.split('\"|\s', string) 
2

için, o zaman

>>> import re 
>>> text = 'This is "a simple" test' 

regex >>> re.split('\s|\"', text)

[ 'Bu', 'is', '' kullanabilirsiniz, csv okuyucusunu kullanarak 'a', 'basit', '', 'test']

0

.

import csv 
text = 'This is "a simple" test' 
list_text=[] 
list_text.append(text) 
for row in csv.reader(list_text, delimiter=" "): 
    print(row) 

ayrıca daha hakkında here

0

yeniden kullanmayı deneyin görebilirsiniz:

import re 
text = 'This is "a simple" test' 
print(re.split('\"|\s', text)) 

sonucu:

['This', 'is', '', 'a', 'simple', '', 'test'] 
0

Sen shlex kütüphaneye bakabilirsiniz.

from shlex import split 
a = 'This is "a simple" text' 
split(a) 
regex sen

aradığınızı olduğunu

sanmıyorum [ 'Bu', 'basit', 'metin', 'is']