咱们要把某字符串依据分割符号拆分不一样的字段,该字符串包含多种不一样的分隔符,例如: s = 'ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'
其中<,>,<;>,<|>,<\t>
都是分割符号,如何处理?java
方法1:连续使用str.split()
方法,每次处理一种分割符号python
方法2: 使用正则表达式的re.split()
方法,推荐.正则表达式
s='ab;cd|efg|hi,jkl|mn\topq;rst,uvw\txyz'
s.split('|,;')
s.split(';')
[ss.split('|') for ss in s.split(';')]
list(map(lambda ss:ss.split('|'),s.split(';')))
t=[]
t.extend([1,2,3])
t.extend([4,5,6])
map(t.extend())
[ss.split('|') for ss in s.split(';')]
sum([ss.split('|') for ss in s.split(';')],[])
def my_split(s,seps):
res=[s]
for sep in seps:
t=[]
list(map(lambda ss: t.extend(ss.split(sep)),res))
res=t
return res
my_split(s,',;|\t')
from functools import reduce
reduce(lambda l, sep:sum(map(lambda ss:ss.split(sep),1),[]),',;|\t',[s]
my_splits== lambda s,seps:reduce(lambda l, sep:sum(map(lambda ss:ss.split(sep),1),[]),seps,[s]
复制代码
如何判断字符串a
是否以字符串b
开头或结尾?bash
某文件目录下有一系列文件:服务器
quicksort.c
graph.p
heap.java
install.sh
stack.cpp
复制代码
编写程序给其中全部.sh
文件和.py
文件加上用户可执行权限.网络
使用str.startswith()
和str.endswith()
方法(注意:多个匹配时参数使用元组)ui
fn='aaa.py'
fn.endswith('.py')
fn.endswith('.sh','.py')
import os
os.listdir('.')
s=os.stat('b.py')
s.st_mode|0o100
oct(s.st_mode|0o100)
od.chmod('b.py',s.st_mode |0o100)
import stat
stat.S_IXUSR
for fn in os.listdir():
if fn.endswith('.py','.sh')
fs=os.stat(fn)
os.chmod(fn,fs.st_mode | stat.S_IXUSR)
复制代码
如何调整字符串中文本的格式?spa
某软件的logo
文件,其中的日期格式为'yyyy-mm-dd'
咱们想把其中日期改成美国日期的格式'mm/dd/yyyy'.
2019-07-23'=>'07/23/2019'
,如何处理?设计
使用正则表达式re.sub()
方法作字符串替换,利用正则表达式的捕获组,捕获每部分的内容,在替换字符串中调整各个捕获组的顺序.code
ls /var/log
cat/var/log/dpkg.log.1
f=open('/var/log/dpkg.log.1')
log=f.read()
import re
re.sub(p,r,s)
print(re.sub(r'(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1',log))
print(re.sub(r'(?P<d>\d{4})-(?P<m>\d{2})-(?P<y>\d{2})',r'\g<m>/\g<y>',log))
复制代码
如何将一个小字符串拼接成一个大字符串?
在设计网络程序时,咱们自定义了一个基于UDP
的网络协议,按照固定次序向服务器传递一系列参数:
hwdetect: "<0112>"
gxDepthBits: "<32>"
gxResolution: "<1024*768>"
gcRefresh: "<60>"" fullAlpha: "<1>" lodDist: "<100>" DistCall: "<500>" 复制代码
在程序中咱们将各个参数按次序收集到列表中:
["<0112>","<32>","<1024>","<60>","<1>,"<100.00>","<500.00>"]
最终咱们要把各个参数拼接成一个数据进行报送.
"<0112><32><1024><60><1><100><500>"
方法一:迭代列表,连续使用"+"
操做依次拼接每个字符串.
方法二:使用str.join()
方法,更加快速的拼接列表中全部字符串.
l=["<0112>"","<32>","<1024>","<60>","<1>,"<100.00>","<500.00>"]
s=''
for x in l:
s+=x
s.join(iterable)->str
timeit ''.join(l)
timeit reduce(str.__add__,1)
复制代码
某个字典存储了一系列属性值: {
"lodDist":100.00,
"SmallCull":0.04,
"DistCull":500.00,
"trilinear":40,
"farclip":477,
复制代码
} 在程序中,咱们想以工整数的格式将其内容输出,如何处理?
lodDist:100.00,
SmallCull:0.04,
DistCull:500.00,
trilinear:40,
farclip:477,
复制代码
方法一:使用字符串的str.ljust(),str.rjust(),str.center()
进行左右中对齐》
方法二:使用format
方法,传递相似'<20>,'>20','^20'
参数完成一样任务.
s='abc'
s.ljust(10)
'abc '
s.rjust(10)
' abc'
format(s,'<10')
format(s,'>10')
format(s,'^10')
format(123,'+')
format(-123,'+')
format(-123,'>+10'
format(-123,'=+10')
format(-123,'0=+10')
format(+546,'0=+10')
d={ 'lodDist':100.00,'SmallCull':0.04,'DistCull':500.00,'trilinear':40,'farclip':477,}
w=max(map(len,d.keys()))
for k,v in d.items():
print(k.ljust(w),':',v)
复制代码
如何去掉字符串不须要的字符?
1.过滤掉用户输入中先后多余的空白字符:
' nick2008@gmail.com'
2.过滤某Windows
下编辑文本中的'\r'
:
'hello world\r\n'
3.去掉文本中的Unicode
组合符号:
''ni há,chǐ fán''
方法一:字符串strip(),lstrip(),rstrip()
方法去掉字符串的两端字符.
s=' hellowowd'
s.strip()
s.lstrip()
s.rstrip()
复制代码
方法二:删除单个位置的字符,能够使用切片+拼接的方式.
s2='abc:1234'
s2[:3]+s2[4:]
'abc1234'
复制代码
方法三:字符串的replace()
方法或者正则表达式re.sub()
删除任意字符串
s3=' abc xyz '
s3.replace()
s3=' \t abc \t,xtz'
import re
re.sub('[ \t\n]','',s3)
复制代码
方法四:字符串的translate()
方法,能够删除多种不一样字符
s='abc1234xyz'
s.translate({ord('a'):'X'})
s.maketrans('abcxyz','XYZABC')
s.translate(s.maketrans('abcxyz','XYZABC'))
s.translate({ord('a'):None})
复制代码
案例4:
s4='ni há,chǐ fán'
c=á
len(c)
import unicodedata
unicodedata.combining(c[1])
[ord(c) for c in s4 if unicodedata.combining(c)]
dict.formkeys([ord(c) for c in s4 if unicodedata.combining(c)],None)
s4.translate(dict.formkeys([ord(c) for c in s4 if unicodedata.combining(c)],None))
复制代码
字符串的分割,拼接,去空格字符,能够用的方法有split(),replace(),translate(),format(),strip()
...