151.md 14.0 KB
Newer Older
W
wizardforcel 已提交
1
# Python – 字符串
W
wizardforcel 已提交
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

> 原文: [https://howtodoinjava.com/python/python-strings/](https://howtodoinjava.com/python/python-strings/)

[Python](https://howtodoinjava.com/python-tutorial/) 中,`string`文字是:

*   代表 Unicode 字符的字节数组
*   用单引号或双引号引起来
*   无限长度

```java
str = 'hello world'

str = "hello world"

```

使用三个单引号或三个双引号创建**多行字符串**

```java
str = '''Say hello
		to python
		programming'''

str = """Say hello
		to python
		programming"""

```

> Python 没有字符数据类型,单个字符就是长度为 1 的字符串。

## 2.子串或切片

通过使用 slice 语法,我们可以获得一系列字符。 索引从零开始。

`str[m:n]`从位置 2(包括)到 5(不包括)返回字符串。

```java
str = 'hello world'

print(str[2:5])	# llo

```

**负切片**从末尾返回子字符串。

```java
str = 'hello world'

print(str[-5:-2])	# wor

```

W
wizardforcel 已提交
55
`str[-m:-n]`将字符串从位置 -5(不包括)返回到 -2(包括)。
W
wizardforcel 已提交
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

## 3.字符串作为数组

在 python 中,字符串表现为数组。 方括号可用于访问字符串的元素。

```java
str = 'hello world'

print(str[0])	# h
print(str[1])	# e
print(str[2])	# l

print(str[20])	# IndexError: string index out of range

```

## 4.字符串长度

W
wizardforcel 已提交
74
len()函数返回字符串的长度:
W
wizardforcel 已提交
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

```java
str = 'hello world'

print(len(str))	# 11

```

## 5.字符串格式化

要在 python 中格式化 s 字符串,请在所需位置在字符串中使用占位符`{ }`。 将参数传递给`format()`函数以使用值格式化字符串。

我们可以在占位符中传递参数位置(从零开始)。

```java
age = 36
name = 'Lokesh'

txt = "My name is {} and my age is {}"

print(txt.format(name, age))	# My name is Lokesh and my age is 36

txt = "My age is {1} and the name is {0}"

print(txt.format(name, age))	# My age is 36 and the name is Lokesh

```

## 6.字符串方法

W
wizardforcel 已提交
105
#### 6.1 大写()
W
wizardforcel 已提交
106 107 108 109 110 111 112 113 114 115 116 117 118 119

它返回一个字符串,其中给定字符串的第一个字符被转换为大写。 当第一个字符为非字母时,它将返回相同的字符串。

```java
name = 'lokesh gupta'

print( name.capitalize() )	# Lokesh gupta

txt = '38 yrs old lokesh gupta'

print( txt.capitalize() )	# 38 yrs old lokesh gupta

```

W
wizardforcel 已提交
120
#### 6.2 casefold()
W
wizardforcel 已提交
121 122 123 124 125 126 127 128 129 130

它返回一个字符串,其中所有字符均为给定字符串的小写字母。

```java
txt = 'My Name is Lokesh Gupta'

print( txt.casefold() )	# my name is lokesh gupta

```

W
wizardforcel 已提交
131
#### 6.3 中央()
W
wizardforcel 已提交
132 133 134 135 136 137 138 139 140 141 142 143 144 145

使用指定的字符(默认为空格)作为填充字符,使字符串居中对齐。

在给定的示例中,输出总共需要 20 个字符,而“ hello world”位于其中。

```java
txt = "hello world"

x = txt.center(20)

print(x)	# '    hello world     '

```

W
wizardforcel 已提交
146
#### 6.4 计数()
W
wizardforcel 已提交
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

它返回指定值出现在字符串中的次数。 它有两种形式:

``count(value)` - `value` to search for in the string.`

``count(value, start, end)` - `value` to search for in the string, where search starts from `start` position till `end` position.`

```java
txt = "hello world"

print( txt.count("o") )			# 2

print( txt.count("o", 4, 7) )	# 1

```

W
wizardforcel 已提交
163
#### 6.5 编码()
W
wizardforcel 已提交
164 165 166 167 168 169 170 171 172 173 174 175

它使用指定的编码对字符串进行编码。 如果未指定编码,将使用`UTF-8`

```java
txt = "My name is åmber"

x = txt.encode()

print(x)	# b'My name is \xc3\xa5mber'

```

W
wizardforcel 已提交
176
#### 6.6 [结尾于()](https://howtodoinjava.com/python/string-endswith-method/)
W
wizardforcel 已提交
177 178 179 180 181 182 183 184 185 186 187 188

如果字符串以指定值结尾,则返回`True`,否则返回`False`

```java
txt = "hello world"

print( txt.endswith("world") )		# True

print( txt.endswith("planet") )		# False

```

W
wizardforcel 已提交
189
#### 6.7 expandtabs()
W
wizardforcel 已提交
190 191 192 193 194 195 196 197 198 199 200 201 202 203

它将制表符大小设置为指定的空格数。

```java
txt = "hello\tworld"

print( txt.expandtabs(2) )		# 'hello world'

print( txt.expandtabs(4) )		# 'hello   world'

print( txt.expandtabs(16) )		# 'hello           world'

```

W
wizardforcel 已提交
204
#### 6.8 找()
W
wizardforcel 已提交
205 206 207 208 209 210 211 212 213 214 215 216 217 218

它查找指定值的第一次出现。 如果指定的值不在字符串中,则返回`-1`

`find()``index()`方法相同,唯一的区别是,如果找不到该值,则`index()`方法会引发异常。

```java
txt = "My name is Lokesh Gupta"

x = txt.find("e")

print(x)		# 6

```

W
wizardforcel 已提交
219
#### 6.9 格式()
W
wizardforcel 已提交
220 221 222 223 224 225 226 227 228 229 230 231 232

它格式化指定的字符串,并在字符串的占位符内插入参数值。

```java
age = 36
name = 'Lokesh'

txt = "My name is {} and my age is {}"

print( txt.format(name, age) )	# My name is Lokesh and my age is 36

```

W
wizardforcel 已提交
233
#### 6.10 format_map()
W
wizardforcel 已提交
234 235 236 237 238 239 240 241 242 243 244 245 246 247

它用于返回字典键的值,以格式化带有命名占位符的字符串。

```java
params = {'name':'Lokesh Gupta', 'age':'38'} 

txt = "My name is {name} and age is {age}"

x = txt.format_map(params)

print(x)		# My name is Lokesh Gupta and age is 38

```

W
wizardforcel 已提交
248
#### 6.11 指数()
W
wizardforcel 已提交
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263

*   它在给定的字符串中查找指定值的第一次出现。
*   如果找不到要搜索的值,则会引发异常。

```java
txt = "My name is Lokesh Gupta"

x = txt.index("e")

print(x)		# 6

x = txt.index("z")	# ValueError: substring not found

```

W
wizardforcel 已提交
264
#### 6.12 isalnum()
W
wizardforcel 已提交
265 266 267 268 269 270 271 272 273 274

它检查字母数字字符串。 如果所有字符均为字母数字,表示字母`(a-zA-Z)`和数字`(0-9)`,则返回`True`

```java
print("LokeshGupta".isalnum())		# True

print("Lokesh Gupta".isalnum())		# False - Contains space

```

W
wizardforcel 已提交
275
#### 6.13 isalpha()
W
wizardforcel 已提交
276 277 278 279 280 281 282 283 284 285 286 287

如果所有字符都是字母,则返回`True`,表示字母`(a-zA-Z)`

```java
print("LokeshGupta".isalpha())			# True

print("Lokesh Gupta".isalpha())			# False - Contains space

print("LokeshGupta38".isalpha())		# False - Contains numbers

```

W
wizardforcel 已提交
288
#### 6.14 十进制()
W
wizardforcel 已提交
289 290 291 292 293 294 295 296 297 298 299 300 301 302

如果所有字符均为小数(0-9),则返回代码。 否则返回`False`

```java
print("LokeshGupta".isdecimal())	# False

print("12345".isdecimal())			# True

print("123.45".isdecimal())			# False - Contains 'point'

print("1234 5678".isdecimal())		# False - Contains space

```

W
wizardforcel 已提交
303
#### 6.15 isdigit()
W
wizardforcel 已提交
304 305 306 307 308 309 310 311 312 313 314 315 316 317

如果所有字符都是数字,则返回`True`,否则返回`False`。 指数也被认为是数字。

```java
print("LokeshGupta".isdigit())		# False

print("12345".isdigit())			# True

print("123.45".isdigit())			# False - contains decimal point

print("1234\u00B2".isdigit())		# True - unicode for square 2

```

W
wizardforcel 已提交
318
#### 6.16 标识符()
W
wizardforcel 已提交
319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334

如果字符串是有效的标识符,则返回`True`,否则返回`False`

有效的标识符仅包含字母数字字母`(a-z)``(0-9)`或下划线`( _ )`。 它不能以数字开头或包含任何空格。

```java
print( "Lokesh_Gupta_38".isidentifier() )		# True

print( "38_Lokesh_Gupta".isidentifier() )		# False - Start with number

print( "_Lokesh_Gupta".isidentifier() )			# True

print( "Lokesh Gupta 38".isidentifier() )		# False - Contain spaces

```

W
wizardforcel 已提交
335
#### 6.17 islower()
W
wizardforcel 已提交
336 337 338 339 340 341 342 343 344 345 346 347 348 349

如果所有字符均小写,则返回`True`,否则返回`False`。 不检查数字,符号和空格,仅检查字母字符。

```java
print( "LokeshGupta".islower() )		# False

print( "lokeshgupta".islower() )		# True

print( "lokesh_gupta".islower() )		# True

print( "lokesh_gupta_38".islower() )	# True

```

W
wizardforcel 已提交
350
#### 6.18 isnumeric()
W
wizardforcel 已提交
351 352 353 354 355 356 357 358 359 360 361 362 363 364

如果所有字符都是数字(`0-9`),则此方法返回`True`,否则返回`False`。 指数也被认为是数值。

```java
print("LokeshGupta".isnumeric())	# False

print("12345".isnumeric())			# True

print("123.45".isnumeric())			# False - contains decimal point

print("1234\u00B2".isnumeric())		# True - unicode for square 2

```

W
wizardforcel 已提交
365
#### 6.19 可打印()
W
wizardforcel 已提交
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384

如果所有字符均可打印,则返回`True`,否则返回 False。 不可打印字符用于指示某些格式化操作,例如:

*   空白(被视为不可见的图形)
*   回车
*   标签
*   换行
*   分页符
*   空字符

```java
print("LokeshGupta".isprintable())		# True

print("Lokesh Gupta".isprintable())		# True

print("Lokesh\tGupta".isprintable())	# False

```

W
wizardforcel 已提交
385
#### 6.20 isspace()
W
wizardforcel 已提交
386 387 388

如果字符串中的所有字符都是空格,则返回`True`,否则返回`False`

W
wizardforcel 已提交
389
#### 6:21。 istitl A()
W
wizardforcel 已提交
390 391 392 393 394 395 396 397 398 399

如果文本中的所有单词均以大写字母开头,而其余单词均为小写字母(即标题大小写),则返回`True`。 否则`False`

```java
print("Lokesh Gupta".istitle())		# True

print("Lokesh gupta".istitle())		# False

```

W
wizardforcel 已提交
400
#### 6.22 isupper()
W
wizardforcel 已提交
401 402 403 404 405 406 407 408 409 410 411 412

如果所有字符均大写,则返回`True`,否则返回`False`。 不检查数字,符号和空格,仅检查字母字符。

```java
print("LOKESHGUPTA".isupper())		# True

print("LOKESH GUPTA".isupper())		# True

print("Lokesh Gupta".isupper())		# False

```

W
wizardforcel 已提交
413
#### 6.23 加入()
W
wizardforcel 已提交
414 415 416 417 418 419 420 421 422 423 424 425

它以可迭代方式获取所有项目,并使用强制性指定的分隔符将它们连接为一个字符串。

```java
myTuple = ("Lokesh", "Gupta", "38")

x = "#".join(myTuple)

print(x)	# Lokesh#Gupta#38

```

W
wizardforcel 已提交
426
#### 6.24 光()
W
wizardforcel 已提交
427 428 429 430 431 432 433 434 435 436 437 438

此方法将使用指定的字符(默认为空格)作为填充字符使字符串左对齐。

```java
txt = "lokesh"

x = txt.ljust(20, "-")

print(x)	# lokesh--------------

```

W
wizardforcel 已提交
439
#### 6.25 降低()
W
wizardforcel 已提交
440 441 442 443 444 445 446 447 448 449 450 451

它返回一个字符串,其中所有字符均为小写。 符号和数字将被忽略。

```java
txt = "Lokesh Gupta"

x = txt.lower()

print(x)	# lokesh gupta

```

W
wizardforcel 已提交
452
#### 6.26 lstrip()
W
wizardforcel 已提交
453 454 455 456 457 458 459 460 461 462 463 464

它删除所有前导字符(默认为空格)。

```java
txt = "#Lokesh Gupta"

x = txt.lstrip("#_,.")

print(x)	# Lokesh Gupta

```

W
wizardforcel 已提交
465
#### 6.27 maketrans()
W
wizardforcel 已提交
466 467 468 469 470 471 472 473 474 475 476 477

它创建一个字符到其转换/替换的一对一映射。 当在`translate()`方法中使用时,此转换映射用于将字符替换为其映射的字符。

```java
dict = {"a": "123", "b": "456", "c": "789"}

string = "abc"

print(string.maketrans(dict))	# {97: '123', 98: '456', 99: '789'}

```

W
wizardforcel 已提交
478
#### 6.28 划分()
W
wizardforcel 已提交
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498

它在给定的文本中搜索指定的字符串,并将该字符串拆分为包含三个元素的元组:

*   第一个元素包含指定字符串之前的部分。
*   第二个元素包含指定的字符串。
*   第三个元素包含字符串后面的部分。

```java
txt = "my name is lokesh gupta"

x = txt.partition("lokesh")

print(x)	# ('my name is ', 'lokesh', ' gupta')

print(x[0])	# my name is 
print(x[1])	# lokesh
print(x[2])	#  gupta

```

W
wizardforcel 已提交
499
#### 6.29 更换()
W
wizardforcel 已提交
500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518

它将指定的短语替换为另一个指定的短语。 它有两种形式:

*   `string.replace(oldvalue, newvalue)`
*   `string.replace(oldvalue, newvalue, count)` –“计数”指定要替换的匹配次数。 默认为所有事件。

```java
txt = "A A A A A"

x = txt.replace("A", "B")

print(x)	# B B B B B

x = txt.replace("A", "B", 2)

print(x)	# B B A A A

```

W
wizardforcel 已提交
519
#### 6.30 rfind()
W
wizardforcel 已提交
520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535

它查找指定值的最后一次出现。 如果在给定的文本中找不到该值,则返回`-1`

```java
txt = "my name is lokesh gupta"

x = txt.rfind("lokesh")		

print(x)		# 11

x = txt.rfind("amit")		

print(x)		# -1

```

W
wizardforcel 已提交
536
#### 6.31 rindex()
W
wizardforcel 已提交
537 538 539 540 541 542 543 544 545 546 547 548 549 550

它查找指定值的最后一次出现,如果找不到该值,则会引发异常。

```java
txt = "my name is lokesh gupta"

x = txt.rindex("lokesh")		

print(x)				# 11

x = txt.rindex("amit")	# ValueError: substring not found

```

W
wizardforcel 已提交
551
#### 6.32 调整()
W
wizardforcel 已提交
552 553 554 555 556 557 558 559 560 561 562 563

它将使用指定的字符(默认为空格)作为填充字符来右对齐字符串。

```java
txt = "lokesh"

x = txt.rjust(20,"#")

print(x, "is my name")	# ##############lokesh is my name

```

W
wizardforcel 已提交
564
#### 6.33 rpartition()
W
wizardforcel 已提交
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584

它搜索指定字符串的最后一次出现,并将该字符串拆分为包含三个元素的元组。

*   第一个元素包含指定字符串之前的部分。
*   第二个元素包含指定的字符串。
*   第三个元素包含字符串后面的部分。

```java
txt = "my name is lokesh gupta"

x = txt.rpartition("lokesh")

print(x)	# ('my name is ', 'lokesh', ' gupta')

print(x[0])	# my name is 
print(x[1])	# lokesh
print(x[2])	#  gupta

```

W
wizardforcel 已提交
585
#### 6.34 rsplit()
W
wizardforcel 已提交
586 587 588 589 590 591 592 593 594 595 596 597

它将字符串从右开始拆分为列表。

```java
txt = "apple, banana, cherry"

x = txt.rsplit(", ")

print(x)	# ['apple', 'banana', 'cherry']

```

W
wizardforcel 已提交
598
#### 6.35 rstrip()
W
wizardforcel 已提交
599 600 601 602 603 604 605 606 607 608 609 610

它删除所有结尾字符(字符串末尾的字符),空格是默认的结尾字符。

```java
txt = "     lokesh     "

x = txt.rstrip()

print(x)	# '     lokesh'

```

W
wizardforcel 已提交
611
#### 6.36 [split()](https://howtodoinjava.com/python/split-string/)
W
wizardforcel 已提交
612 613 614 615 616 617 618 619 620 621 622 623

它将字符串拆分为列表。 您可以指定分隔符。 默认分隔符为空格。

```java
txt = "my name is lokesh"

x = txt.split()

print(x)	# ['my', 'name', 'is', 'lokesh']

```

W
wizardforcel 已提交
624
#### 6.37 splitlines()
W
wizardforcel 已提交
625 626 627 628 629 630 631 632 633 634 635 636

通过在换行符处进行拆分,它将字符串拆分为列表。

```java
txt = "my name\nis lokesh"

x = txt.splitlines()

print(x)	# ['my name', 'is lokesh']

```

W
wizardforcel 已提交
637
#### 6.38 [startswith()](https://howtodoinjava.com/python/string-startswith/)
W
wizardforcel 已提交
638 639 640 641 642 643 644 645 646 647 648 649

如果字符串以指定值开头,则返回`True`,否则返回`False`。 字符串比较区分大小写。

```java
txt = "my name is lokesh"

print( txt.startswith("my") )	# True

print( txt.startswith("My") )	# False

```

W
wizardforcel 已提交
650
#### 6.39 跳闸()
W
wizardforcel 已提交
651 652 653 654 655 656 657 658 659 660

它将删除所有前导(开头的空格)和结尾(结尾的空格)字符(默认为空格)。

```java
txt = "   my name is lokesh   "

print( txt.strip() )	# 'my name is lokesh'

```

W
wizardforcel 已提交
661
#### 6.40 swapcase()
W
wizardforcel 已提交
662 663 664 665 666 667 668 669 670 671

它返回一个字符串,其中所有大写字母均为小写字母,反之亦然。

```java
txt = "My Name Is Lokesh Gupta"

print( txt.swapcase() )	# mY nAME iS lOKESH gUPTA

```

W
wizardforcel 已提交
672
#### 6.41 标题()
W
wizardforcel 已提交
673 674 675 676 677 678 679 680 681 682 683 684

它返回一个字符串,其中每个单词的第一个字符均为大写。 如果单词开头包含数字或符号,则其后的第一个字母将转换为大写字母。

```java
print( "lokesh gupta".title() )	# Lokesh Gupta

print( "38lokesh gupta".title() )	# 38Lokesh Gupta

print( "1\. lokesh gupta".title() )	# Lokesh Gupta

```

W
wizardforcel 已提交
685
#### 6.42 翻译()
W
wizardforcel 已提交
686 687 688 689 690 691 692 693 694 695 696 697

它需要转换表根据映射表替换/转换给定字符串中的字符。

```java
translation = {97: None, 98: None, 99: 105}

string = "abcdef"	

print( string.translate(translation) )	# idef

```

W
wizardforcel 已提交
698
#### 6.43 上()
W
wizardforcel 已提交
699 700 701 702 703 704 705 706 707 708

它返回一个字符串,其中所有字符均大写。 符号和数字将被忽略。

```java
txt = "lokesh gupta"

print( txt.upper() )	# LOKESH GUPTA

```

W
wizardforcel 已提交
709
#### 6.44 zfill()
W
wizardforcel 已提交
710 711 712 713 714 715 716 717 718 719 720 721 722

它在字符串的开头添加零(0),直到达到指定的长度。

```java
txt = "100"

x = txt.zfill(10)

print( 0000000100 )	# 0000000100

```

学习愉快!