Există un Piton funcție care va trim spațiu (spații și tab-uri) dintr-un șir?
Exemplu: \t exemplu string\t
→ exemplu string
Spațiu pe ambele părți:
s = " \t a string example\t "
s = s.strip()
Spațiu pe partea dreapta:
s = s.rstrip()
Spațiu pe partea stângă:
s = s.lstrip()
Ca thedz subliniază, vă poate oferi un argument să se dezbrace arbitrar de caractere pentru fiecare din aceste funcții, astfel:
s = s.strip(' \t\n\r')
Acest lucru va benzi orice spațiu, \t
, \n
, sau \r
caractere din partea stângă, partea dreaptă, sau pe ambele părți ale șirului.
Exemplele de mai sus doar elimina siruri de caractere din partea stângă și partea dreaptă de siruri de caractere. Dacă doriți să eliminați, de asemenea, de caractere din mijlocul unui șir de caractere, încerca re.sub
:
import re
print re.sub('[\s+]', '', s)
Care ar trebui să imprimați:
astringexample
Pentru conducere și la sfârșit spațiu:
s = ' foo \t '
print s.strip() # prints "foo"
În caz contrar, o expresie regulată de lucrări:
import re
pat = re.compile(r'\s+')
s = ' \t foo \t bar \t '
print pat.sub('', s) # prints "foobar"
Puteți folosi, de asemenea, foarte simplu, și funcția de bază: str.replace(), funcționează cu spații goale și file:
>>> whitespaces = " abcd ef gh ijkl "
>>> tabs = " abcde fgh ijkl"
>>> print whitespaces.replace(" ", "")
abcdefghijkl
>>> print tabs.replace(" ", "")
abcdefghijkl
Simplu și ușor.
#how to trim a multi line string or a file
s=""" line one
\tline two\t
line three """
#line1 starts with a space, #2 starts and ends with a tab, #3 ends with a space.
s1=s.splitlines()
print s1
[' line one', '\tline two\t', 'line three ']
print [i.strip() for i in s1]
['line one', 'line two', 'line three']
#more details:
#we could also have used a forloop from the begining:
for line in s.splitlines():
line=line.strip()
process(line)
#we could also be reading a file line by line.. e.g. my_file=open(filename), or with open(filename) as myfile:
for line in my_file:
line=line.strip()
process(line)
#moot point: note splitlines() removed the newline characters, we can keep them by passing True:
#although split() will then remove them anyway..
s2=s.splitlines(True)
print s2
[' line one\n', '\tline two\t\n', 'line three ']
Nimeni nu a postat aceste regex soluții încă.
Potrivire:
>>> import re
>>> p=re.compile('\\s*(.*\\S)?\\s*')
>>> m=p.match(' \t blah ')
>>> m.group(1)
'blah'
>>> m=p.match(' \tbl ah \t ')
>>> m.group(1)
'bl ah'
>>> m=p.match(' \t ')
>>> print m.group(1)
None
Căutarea (trebuie să se ocupe de "numai spații" de intrare caz diferit):
>>> p1=re.compile('\\S.*\\S')
>>> m=p1.search(' \tblah \t ')
>>> m.group()
'blah'
>>> m=p1.search(' \tbl ah \t ')
>>> m.group()
'bl ah'
>>> m=p1.search(' \t ')
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
Dacă utilizați re.sub
, se poate elimina interioară spațiu, care ar putea fi de dorit.
(re.sub(' +', ' ',(my_str.înlocui('\n',' ')))).strip()
Acest lucru va elimina toate spațiile nedorite și caractere newline. Sper că acest ajutor
import re
my_str = ' a b \n c '
formatted_str = (re.sub(' +', ' ',(my_str.replace('\n',' ')))).strip()
Acest lucru va avea ca rezultat :
' de b \n c ' va fi schimbat la 'un b'
Spațiu include spațiu, tab-uri și CRLF. Atât de elegant și o-liner funcția șir putem folosi este traducere.
' buna ziua mar'.traduce(Nici unul, ' \n\t\r')
SAU dacă doriți să fie aprofundată
import string
' hello apple'.translate(None, string.whitespace)
Dacă folosind Python 3: În declarația de imprimare, cu finisaj sep="". Care va separate de spații.
EXEMPLU:
txt="potatoes"
print("I love ",txt,"",sep="")
Acest lucru va tipări: Îmi place cartofi.
În loc de: Îmi place cartofi .
In cazul tau, din moment ce ar fi încercarea de a obține plimbare de \t, nu-sep="\t"
încercați să traducă
>>> import string
>>> print '\t\r\n hello \r\n world \t\r\n'
hello
world
>>> tr = string.maketrans(string.whitespace, ' '*len(string.whitespace))
>>> '\t\r\n hello \r\n world \t\r\n'.translate(tr)
' hello world '
>>> '\t\r\n hello \r\n world \t\r\n'.translate(tr).replace(' ', '')
'helloworld'
Dacă doriți să tăiați spațiu oprit doar la începutul și sfârșitul șirului, puteți face ceva de genul asta:
some_string = " Hello, world!\n "
new_string = some_string.strip()
# new_string is now "Hello, world!"
Acest lucru funcționează foarte mult ca Qt's QString::tuns() metodă, în care se indeparteaza de conducere și la sfârșit spațiu, lăsând spațiu intern singur.
Dar dacă te'd ceva ca Qt's QString::simplificată() metodă care elimină nu numai de conducere și la sfârșit spațiu, dar, de asemenea, "bine" toate consecutive interne spațiu pentru un singur caracter spațiu, puteți folosi o combinație de `.split () " și " " ".alătură-te, ca aceasta:
some_string = "\t Hello, \n\t world!\n "
new_string = " ".join(some_string.split())
# new_string is now "Hello, world!"
În acest ultim exemplu, fiecare secvență de interne spațiu înlocuit cu un singur spațiu, în timp ce încă tunderea spațiu de pe la începutul și sfârșitul șirului.
În general, eu sunt, folosind următoarea metodă:
>>> myStr = "Hi\n Stack Over \r flow!"
>>> charList = [u"\u005Cn",u"\u005Cr",u"\u005Ct"]
>>> import re
>>> for i in charList:
myStr = re.sub(i, r"", myStr)
>>> myStr
'Hi Stack Over flow'
Notă: Aceasta este doar pentru eliminarea "\n", "\r" și "\t de" numai. Nu scoateți spații suplimentare.
pentru a scoate spatiile din mijlocul șirului
$p = "ATGCGAC ACGATCGACC";
$p =~ s/\s//g;
print $p;
ieșire:
ATGCGACACGATCGACC