How do I trim whitespace?
是否有一个python函数可以从字符串中删除空白(空格和制表符)?
示例:
两边空白:
1 2 | s =" \t a string example\t " s = s.strip() |
右侧空白:
1 | s = s.rstrip() |
左侧空白:
1 | s = s.lstrip() |
正如Thedz所指出的,您可以提供一个参数来将任意字符剥离到以下任何函数:
1 2 3 | s = s.strip(' \t ') |
这将从字符串的左侧、右侧或两侧删除任何空格、
上面的示例仅从字符串的左侧和右侧删除字符串。如果还想从字符串中间删除字符,请尝试
1 2 | import re print re.sub('[\s+]', '', s) |
应该打印出来:
1 | astringexample |
python
1 2 3 | str.strip() #trim str.lstrip() #ltrim str.rstrip() #rtrim |
对于前导空格和尾随空格:
1 2 | s = ' foo \t ' print s.strip() # prints"foo" |
否则,正则表达式的作用是:
1 2 3 4 | import re pat = re.compile(r'\s+') s = ' \t foo \t bar \t ' print pat.sub('', s) # prints"foobar" |
您还可以使用非常简单的基本函数:str.replace(),用于空格和制表符:
1 2 3 4 5 6 7 | >>> whitespaces =" abcd ef gh ijkl " >>> tabs =" abcde fgh ijkl" >>> print whitespaces.replace("","") abcdefghijkl >>> print tabs.replace("","") abcdefghijkl |
简单而简单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #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 ', '\tline two\t ', 'line three '] |
(re.sub(' +', ' ',(my_str.replace('
',' ')))).strip()
这将删除所有不需要的空格和换行符。希望这有帮助
1 2 3 4 5 | import re my_str = ' a b c ' formatted_str = (re.sub(' +', ' ',(my_str.replace(' ',' ')))).strip() |
这将导致:
"A B C"将更改为"A B C"
还没有人发布这些regex解决方案。
匹配:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | >>> 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 |
搜索(您必须以不同的方式处理"仅空格"输入框):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >>> 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' |
如果使用
空白包括空格、制表符和CRLF。所以我们可以使用的一个优雅的一行字符串函数是translate。
\t
')
或者如果你想彻底
1 2 | import string ' hello apple'.translate(None, string.whitespace) |
1 2 3 4 5 6 7 8 | something ="\t please_ \t remove_ all_ whitespaces \t " something ="".join(something.split()) |
输出:请删除所有空格
如果使用python 3:在打印语句中,请使用sep=。这将把所有的空间分开。
例子:
1 2 | txt="potatoes" print("I love",txt,"",sep="") |
这将打印:我喜欢土豆。
而不是:我喜欢土豆。
在您的情况下,由于您将尝试乘坐 ,do sep=" "
如果只想从字符串的开始和结束处删除空白,可以这样做:
1 2 3 4 | some_string =" Hello, world! " new_string = some_string.strip() # new_string is now"Hello, world!" |
这与qt的qstring::trimmed()方法非常相似,因为它删除了前导和尾随的空白,而只保留内部空白。
但是,如果您希望使用qt的qstring::simpled()方法,它不仅删除前导空格和尾随空格,而且将所有连续的内部空格"挤压"为一个空格字符,则可以使用
1 2 3 4 5 | some_string ="\t Hello, \t world! " new_string ="".join(some_string.split()) # new_string is now"Hello, world!" |
在上一个示例中,每个内部空白序列都替换为一个空格,同时仍然从字符串的开始和结束处删除空白。
尝试翻译
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | >>> import string >>> print '\t hello world \t ' hello world >>> tr = string.maketrans(string.whitespace, ' '*len(string.whitespace)) >>> '\t hello world \t '.translate(tr) ' hello world ' >>> '\t hello world \t '.translate(tr).replace(' ', '') 'helloworld' |
通常,我使用以下方法:
1 2 3 4 5 6 7 8 9 10 | >>> myStr ="Hi Stack Over 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' |
注意:这仅用于删除""、"
"和" "。它不会删除多余的空间。
用于从字符串中间删除空格
1 2 3 | $p ="ATGCGAC ACGATCGACC"; $p =~ s/\s//g; print $p; |
输出:ATGCGACACGGATCGACC公司
这将删除字符串开头和结尾的所有空白和换行符:
1 2 3 4 5 6 7 8 | >>> s =" \t some text " >>> re.sub("^\s+|\s+$","", s) >>>"some text" |