python str解析

Python的内建字符串类(无需import);它提供了很多常用的字符串处理函数。
str成员函数均不影响调用字符串本身,返回一个处理后的副本。

S.center(width[, fillchar]) -> string
以fillchar(必须是一个字符,默认为一空格)填充S到宽度为width,并以S居中。
类似的还有ljust,rjust

>>> s = "notice"
>>> s.rjust(20, '*')
'**************notice'
>>> s.ljust(20, '*')
'notice**************'
>>> s.center(20, '*')
'*******notice*******'

>>> s.center(20, "-*")
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    s.center(20, "-*")
TypeError: center() argument 2 must be char, not str
>>> s.center(1)
'notice'

S.lstrip([chars]) -> string or unicode
移除S开始部分中的由chars指定的字符,chars可以是多个字符(与center不同),默认是空白字符。
只要S开始的字符在参数chars中,即剔除,而不是整体和chars匹配才剔除。
如果chars是unicode,首先要将S转换为unicode,然后进行strip。
类似的有strip,rstrip

>>> s = string.whitespace
>>> s.lstrip()
''
>>> s = "ababcxyz"
>>> s.lstrip("abc")
'xyz'
>>> s
'ababcxyz'

S.endswith(suffix[, start[, end]]) -> bool
测试S[start:end]是不是以suffix结尾。
suffix也可以是由string组成的tuple,只要tuple中有一个元素通过测试则返回True。
类似的有startswith

>>> s = "This is a test."
>>> s.endswith("test.")
True
>>> test = ("test", "a test")
>>> s.endswith(test)
False
>>> test = ("test", "test.")
>>> s.endswith(test)
True

>>> s = "startswith"
>>> s.startswith("star")
True
>>> s.startswith("stat")
False
>>> slist = ("state", "spar")
>>> s.startswith(slist)
False
>>> slist = ("spar", "art")
>>> s.startswith(slist, 2)
True

S.count(sub[, start[, end]]) -> int
返回sub在S[start:end]中不重复出现的次数。

>>> s = "banana"
>>> s.count("an")
2
>>> s.count("ana")
1
>>> s.count("nan", -3)
0

S.find(sub [,start [,end]]) -> int
返回sub在S[start:end]中第一次出现的位置;查找失败返回-1(与index不同)。
类似的有rfind。

>>> s = "mississippi"
>>> s.rfind("ssi")
5
>>> s.find("ssi")
2
>>> s.find("mm")
-1
>>> s.rfind("mm")
-1

S.index(sub [,start [,end]]) -> int
同S.find(),除了:查找失败抛出ValueError。
类似的有rindex

>>> s = "This is a test."
>>> s.index("is")
2
>>> s.index("is", 3)
5
>>> s.index("is", 6)

Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    s.index("is", 6)
ValueError: substring not found

S.isalnum() -> bool
测试非空字符串中的字符是否要么是字母,要么是数字,即a~zA~Z0~9。
类似的有isalpha,isdigit,isspace,与islower,isupper不同的是,这些函数针对S中的每个字符测试,有一个不符即返回False

>>> import string
>>> all = string.letters + string.digits
>>> all
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
>>> all.isalnum()
True
>>> none = string.punctuation
>>> none
'!"#$%&/'()*+,-./:;<=>?@[//]^_`{|}~'
>>> none.isalnum()
False
>>> a = ""
>>> a.isalnum()
False
>>> a = "This is a test"
>>> a.isalnum()
False

S.isalpha() -> bool
测试非空字符串是否全是字母。

>>> a = "aB12"
>>> a.isalpha()
False
>>> a = "aB"
>>> a.isalpha()
True

S.isdigit() -> bool
测试非空字符串是否全是数字。

>>> "ab12".isdigit()
False
>>> "12".isdigit()
True
>>> "3.14".isdigit()
False

S.isspace() -> bool
测试非空字符串是否全是空白。

>>> import string
>>> string.whitespace
'/t/n/x0b/x0c/r '
>>> string.whitespace.isspace()
True
>>> "/t/t /n".isspace()
True
>>> " _ ".isspace()
False

S.islower() -> bool
测试非空字符串中可大小写转换的字母是否全是小写字母。
类似的还有isupper,lower,upper,swapcase,此类函数只测试可以大小写的字母,而忽略其他字符。

>>> "pi = 3.14".islower()
True
>>> "".islower()
False
>>> "PI = 3.14".islower()
False
>>> "PI = 3.14".isupper()
True
>>> s = "Beijing 2008"
>>> s.lower()
'beijing 2008'
>>> s.upper()
'BEIJING 2008'
>>> s
'Beijing 2008'

S.join(sequence) -> string
以S为分隔符链接sequence中的各个字符串
当len(sequence)<=1,返回值中不会出现S。

>>> s = ["this", "is", "Beijing"]
>>> "_*_".join(s)
'this_*_is_*_Beijing'
>>> "".join(s)
'thisisBeijing'

>>> " * ".join("1234")
'1 * 2 * 3 * 4'

>>> s = ["Beijing"]
>>> a.join(s)
'Beijing'
>>> s = []
>>> a.join(s)
''

S.split([sep [,maxsplit]]) -> list of strings
返回一个string组成的list:以sep(可以是字符串)为分隔符分割S,如果sep未指定,或者是None,则以空白为分隔符。
sep不会出现在返回值list中。sep左右一定存在一个元素体现在返回结果中。

>>> s = "Mississippi"
>>> s.split('s')
['Mi', '', 'i', '', 'ippi']
>>> s.split('ss')
['Mi', 'i', 'ippi']

>>> s = "1/t2/n/t3/n/t end"
>>> print s
1    2
    3
     end
>>> s.split()
['1', '2', '3', 'end']

>>> s = ""
>>> s.split("ss")
['']
>>> s = "hello"
>>> s.split()
['hello']

>>> s = "aaaaa"
>>> s.split("aa")
['', '', 'a']

>>> s = "onion"
>>> s.split("on")
['', 'i', '']

S.splitlines([keepends]) -> list of strings
返回S中各行组成的一个list。如果想在list的每个元素中包含换行符,需要设置keepends为True。

>>> s = "first/nsecond/nend"
>>> print s
first
second
end
>>> s.splitlines()
['first', 'second', 'end']
>>> s.splitlines(True)
['first/n', 'second/n', 'end']

>>> s = "/none line/n"
>>> s.splitlines()
['', 'one line']
>>> s.split("/n") #注意区别
['', 'one line', '']

S.partition(sep) -> (head, sep, tail)
以S中首次出现的sep为分隔符,分割S为三部分,并返回。
同类的还有rpartition。

>>> s = 'Mississippi'
>>> s.partition('ssi')
('Mi', 'ssi', 'ssippi')
>>> s.rpartition('ssi')
('Missi', 'ssi', 'ppi')

>>> s.partition("None")
('Mississippi', '', '')
>>> s.rpartition("None")
('', '', 'Mississippi')

S.replace (old, new[, count]) -> string
返回一副本:将S中的old全部替换为new。如果指定了count,则替换前count个。

>>> s = "_-_-_"
>>> s.replace("_", "**")
'**-**-**'
>>> s.replace("_", "**", 1)
'**-_-_'
>>> s
'_-_-_'

<think> 我们正在讨论Python中字符串的split方法。根据引用[1]、[3]和[4],split()函数用于将字符串拆分成多个部分。下面将详细介绍split方法的用法、参数和示例。 ### 基本用法 `split()`方法通过指定的分隔符对字符串进行分割,返回分割后的字符串列表。默认的分隔符是空格,并且默认会进行所有可能的拆分。 语法: ```python str.split(sep=None, maxsplit=-1) ``` - `sep`: 分隔符,默认为空格(包括连续的空格被视为一个分隔符)。如果指定了分隔符,则按照该分隔符进行分割。注意:分隔符不能为空字符串("")。 - `maxsplit`: 最大分割次数,可选参数。默认值为-1,表示不限制分割次数(即分割所有出现的位置)。如果指定了`maxsplit`,则最多分割`maxsplit`次,剩余部分作为列表的最后一个元素。 ### 返回值 返回一个字符串列表(`list`),列表中的每个元素都是分割后的子字符串。 ### 示例 根据引用[3]和[4]提供的例子,我们来看几个具体的示例: 1. **默认分割(空格分割)**: ```python str1 = "I love python" result = str1.split() print(result) # 输出:['I', 'love', 'python'] ``` 2. **指定分隔符**: ```python str2 = '列夫·尼古拉耶维奇·托尔斯泰' result = str2.split('·') print(result) # 输出:['列夫', '尼古拉耶维奇', '托尔斯泰'] ``` 3. **指定最大分割次数**: ```python str2 = '列夫·尼古拉耶维奇·托尔斯泰' result = str2.split('·', 1) # 只分割一次 print(result) # 输出:['列夫', '尼古拉耶维奇·托尔斯泰'] ``` 4. **使用其他分隔符**(引用[4]的例子): ```python s = "i need to leave,i'd like to do some anything important" # 如果使用空格分割,则逗号也会被保留在字符串中 result = s.split() print(result) # 输出:['i', 'need', 'to', "leave,i'd", 'like', 'to', 'do', 'some', 'anything', 'important'] ``` 5. **注意**:如果字符串中有连续的分隔符,并且没有指定`maxsplit`,那么连续分隔符之间会产生空字符串: ```python s = "a,,b,c" result = s.split(',') print(result) # 输出:['a', '', 'b', 'c'] ``` ### rsplit方法 引用[3]还提到了`rsplit()`方法,它与`split()`类似,但是从字符串的右边(末尾)开始分割。语法和参数相同。 示例: ```python str3 = "a,b,c,d" result = str3.rsplit(',', 1) # 从右边分割一次 print(result) # 输出:['a,b,c', 'd'] ``` ### 注意事项 - 如果分隔符在字符串中不存在,则返回整个字符串作为列表的唯一元素。 - 分割后的列表不包含分隔符本身。 通过以上介绍,你应该对Python字符串的`split()`方法有了全面的了解。如果需要进一步了解其他字符串方法,可以参考引用[2]中关于字符串的详细内容。 §§相关问题§§ 1. 如何处理包含多个连续分隔符的字符串分割? 2. `split()`和`rsplit()`在什么场景下会有不同的结果? 3. 除了`split()`,Python中还有哪些常用的字符串分割方法? </think> ### Python字符串`split()`方法使用指南 `split()`是Python字符串处理的核心方法,用于将字符串拆分为子字符串列表。以下是详细说明和示例: #### 语法 ```python str.split(sep=None, maxsplit=-1) -> list ``` - **`sep`**:分隔符(默认为空格) - **`maxsplit`**:最大分割次数(默认为-1,即无限制) #### 核心功能 1. **默认空格分割**: ```python text = "I love Python" print(text.split()) # 输出: ['I', 'love', 'Python'] ``` 2. **指定分隔符**: ```python names = "列夫·尼古拉耶维奇·托尔斯泰" print(names.split('·')) # 输出: ['列夫', '尼古拉耶维奇', '托尔斯泰'] ``` 3. **控制分割次数**: ```python data = "a,b,c,d,e" print(data.split(',', 2)) # 输出: ['a', 'b', 'c,d,e'] ``` 4. **处理特殊字符**: ```python log = "error;2023-08-15;server_down" print(log.split(';')) # 输出: ['error', '2023-08-15', 'server_down'] ``` #### 特殊场景处理 1. **连续分隔符**: ```python s = "apple,,orange,,banana" print(s.split(',')) # 输出: ['apple', '', 'orange', '', 'banana'] ``` 2. **无分隔符时返回原字符串**: ```python print("Hello".split('x')) # 输出: ['Hello'] ``` #### 与`rsplit()`的区别 `rsplit()`从右向左分割: ```python path = "usr/local/bin/python" print(path.rsplit('/', 1)) # 输出: ['usr/local/bin', 'python'] ``` #### 实际应用 ```python # CSV数据处理 csv_line = "John,Doe,30,New York" first_name, last_name, age, city = csv_line.split(',') print(f"{last_name}, {first_name}") # 输出: Doe, John # 日志解析 log_entry = "ERROR|20230815|ServiceTimeout|Retry failed" log_level, date, error_type, _ = log_entry.split('|', 3) print(f"{date}: {error_type}") # 输出: 20230815: ServiceTimeout ``` #### 注意事项 1. 分隔符为空字符串`''`会引发`ValueError` 2. 返回值始终是列表,即使未分割 3. 原始字符串不会被修改(字符串不可变特性) > 提示:使用`split()`后常配合解包操作,如`a, b, c = "x y z".split()`
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值