>  기사  >  백엔드 개발  >  Python의 내장 문자열 분석법

Python의 내장 문자열 분석법

高洛峰
高洛峰원래의
2017-03-07 15:48:231494검색

이 글에서는 개요, 문자열 대소문자 변환, 문자열 형식 출력, 문자열 검색, 위치 지정 및 대체, 문자열 결합 및 분할, 문자열 판단, 문자열 인코딩 등 Python에 내장된 문자열 메서드 중 일부를 주로 소개합니다.

문자열 처리는 매우 일반적인 기술이지만 Python에는 내장된 문자열 메서드가 너무 많아 종종 잊어버리곤 합니다. 빠른 참고를 위해 각 내장 메서드는 Python 3.5.1을 기반으로 특별히 작성되었습니다. 예제는 쉽게 분류됩니다. 인덱싱.

PS: 개요에서 녹색 제목을 클릭하여 해당 카테고리를 입력하거나 오른쪽 사이드바에 있는 기사 디렉토리를 통해 해당 방법을 빠르게 색인화할 수 있습니다.

대소문자 변환

str.capitalize()

첫 글자를 대문자로 변환 , 첫 번째 단어가 대문자 형식이 아닌 경우 원래 문자열이 반환된다는 점에 유의하세요.

'adi dog'.capitalize()
# 'Adi dog'

'abcd Xu'.capitalize()
# 'Abcd Xu'

'Xu abcd'.capitalize()
# 'Xu abcd'

'ß'.capitalize()
# 'SS'

str. lower()

문자열을 소문자로 변환합니다. 이는 ASCII로 인코딩된 문자에만 유효합니다.

'DOBI'.lower()
# 'dobi'

'ß'.lower() # 'ß'는 독일어 소문자로, 여기에 또 다른 소문자 'ss'가 있습니다. , lower 메소드는 변환할 수 없습니다
# 'ß'

'Xu ABCD'.lower()
# 'Xu abcd'

str.casefold ( )

문자열을 소문자로 변환합니다. 유니코드 인코딩의 해당 소문자 형식이 변환됩니다.

'DOBI'.casefold()
# 'dobi'

'ß'.casefold() #독일어의 소문자 ß는 소문자 ss와 동일하며, 대문자는 SS
# 'ss'

str.swapcase()

문자열의 대소문자를 반대로 바꿉니다.

'Xu Dobi a123 ß'.swapcase()
#: 'Xu dOBI A123 SS' 여기서 ß는 대문자인 SS로 변환됩니다
단, s라는 점에 유의해야 합니다. swapcase( ).swapcase() == s가 반드시 참은 아닙니다:

u'xb5'
# 'μ'

u'xb5'.swapcase()
# 'Μ'

u'xb5'.swapcase().swapcase()
# 'μ'

hex(ord(u'xb5'.swapcase().swapcase() ))
Out[154]: '0x3bc'

'Μ'(M이 아닌 mu)의 소문자는 'μ'를 쓰는 것과 정확히 같습니다.

str.title()

문자열에 있는 각 "단어"의 첫 글자를 대문자로 표시합니다. "단어"를 판단하는 기준은 띄어쓰기와 구두점을 기준으로 하기 때문에 영어 소유격이나 일부 영어 약어를 대문자로 표기하는 경우 오류가 발생합니다.

'Hello world'.title()
# 'Hello World'

'중국어 abc def 12gh'.title()
# '중국어 Abc Def 12Gh'

# 하지만 이 방법은 완벽하지 않습니다.
"they're Bill's friends from the UK".title()
# "They'Re Bill'S Friends From The UK"

str.upper()

문자열의 모든 문자를 대문자로 변환하고, 대문자로 변환할 수 없는 문자는 자동으로 무시합니다.

'중국어 abc def 12gh'.upper()
# '중국어 ABC DEF 12GH'
s.upper().isupper()가 반드시 True일 필요는 없다는 점에 유의해야 합니다.

문자열 형식 출력

str.center(width[, fillchar])
주어진 너비에 따라 문자열을 가운데에 배치합니다. 지정된 문자 수에 따라 길이를 초과하거나, 지정된 길이가 문자열 길이보다 작은 경우 원래 문자열을 반환합니다.

'12345'.center(10, '*')
# '**12345***'

'12345'.center(10)
# ' 12345 '
str.ljust(width[, fillchar]); str.rjust(width[, fillchar])

왼쪽에 문자열 내용을 포함하여 지정된 길이의 문자열을 반환합니다. (오른쪽) 길이가 문자열 길이보다 작으면 원래 문자열을 반환합니다. 기본 패딩은 ASCII 공백이며, 패딩된 ​​문자열을 지정할 수 있습니다.

'dobi'.ljust(10)
# 'dobi'

'dobi'.ljust(10, '~')
# 'dobi~~~~~ ~'

'dobi'.ljust(3, '~')
# 'dobi'

'dobi'.ljust(3)
# 'dobi'
str.zfill(width)

문자열을 '0'으로 채우고 지정된 너비의 문자열을 반환합니다.

"42".zfill(5)
# '00042'
"-42".zfill(5)
# '-0042'

'dd' .zfill(5)
# '000dd'

'--'.zfill(5)
# '-000-'

' '.zfill(5)
# '0000'

''.zfill(5)
# '00000'

'dddddddd'.zfill(5)
# 'dddddddd'
str.expandtabs(tabsize=8)
인접 문자열 사이의 간격이 지정된 공백 수 내에 유지되도록 가로 탭 문자를 지정된 공백으로 바꿉니다.

탭 = '1t23t456t7890t1112131415t161718192021'

tab.expandtabs()
# '1 23 456 7890 1112131415 161718192021'
# '123456781234567812345678123456 781234567812345678'

탭 위의 공백 개수와 출력 위치 간의 관계 .expandtabs(4)
# '1 23 456 7890 1112131415 161718192021'
# '12341234123412341234123412341234'
str.format(^args,^^kwargs)
🎜>

많습니다 문자열 형식 지정 구문. 공식 문서에는 이미 더 자세한 예제가 있으므로 여기서는 예제를 작성하지 않겠습니다. 아동용 신발에 대해 더 알고 싶은 분은 여기를 직접 클릭하세요. 형식 예제

str.format_map(mapping )


str .format(*args, **kwargs)와 유사하지만 차이점은 매핑이 사전 개체라는 것입니다.

People = {'name':'john', 'age':56}

'제 이름은 {name}이고, 저는 {age}살입니다'.format_map(People)

# '내 이름은 John입니다. 저는 56세입니다.'

문자열 검색, 위치 지정 및 교체


str.count(sub[, start[, end] ])

text = '외부 보호 덮개'

text.count('e')

# 4

text.count('e', 5, 11)

# 1

text.count('e', 5, 10)

# 0
str.find(sub[, start[, end]]); str.rfind(sub [, start[, end]])
text = '외부 보호 덮개'

text.find('er')

# 3

text.find('to ')

# -1

text.find('er', 3)

Out[121]: 3

text.find('er', 4)

아웃[122]: 20

text.find('er', 4, 21)

아웃[123]: -1

text.find('er', 4, 22)

아웃[124]: 20

text.rfind('er')

아웃[125]: 20

text.rfind('er', 20)

아웃[126]: 20

text.rfind('er', 20, 21)

아웃[129]: -1
str.index(sub[, start [, end]]); str.rindex(sub[, start[, end]])
find() rfind()와 유사하지만, 발견되지 않으면 ValueError가 발생한다는 차이점이 있습니다.

str.replace(old, new[, count])

'dog wow wow jiao'.replace('wow', 'wang')
# 'dog wang wang jiao'

'dog wow wow jiao'.replace('wow', 'wang', 1)

# 'dog wow wow jiao'

'dog wow wow jiao'.replace('wow ', 'wang', 0)

# 'dog wow wow jiao'

'dog wow wow jiao'.replace('wow', 'wang', 2)

# 'dog wang wang jiao'

'dog wow wow jiao'.replace('wow', 'wang', 3)

# 'dog wang wang jiao'
str.lstrip([chars]); str.rstrip([문자]); str.strip([문자])
' dobi'.lstrip()
# 'dobi'
'db.kun.ac.cn'.lstrip(' dbk')
# '.kun.ac.cn'

' 도비 '.rstrip()

# ' 도비'
'db.kun.ac.cn'.rstrip( 'acn')
# 'db.kun.ac.'

' 도비 '.strip()

# 'dobi'
'db.kun.ac.cn'.strip ('db.c')
# 'kun.ac.cn'
'db.kun.ac.cn'.strip('cbd.un')
# 'kun.a'
static str.maketrans(x[, y[, z]]); str.translate(table)
maktrans는 번역에 사용할 비교 테이블을 생성하는 데 사용되는 정적 메서드입니다.
maktrans에 매개변수가 하나만 있는 경우 매개변수는 사전이어야 합니다. 사전의 키는 유니코드 인코딩(정수)이거나 길이가 1인 문자열입니다. 사전의 값은 None 또는 임의의 문자열일 수 있습니다. 유니코드 인코딩.

a = '도비'

ord('o')
# 111

ord('a')

# 97

hex( ord('dog'))

# '0x72d7'

b = {'d':'dobi', 111:' is ', 'b':97, 'i':'u72d7u72d7' }

table = str.maketrans(b)

a.translate(table)

# 'dobi is a dog'

maktrans에 두 개의 매개변수가 있는 경우 두 매개변수는 매핑을 형성하고 두 문자열은 길이가 동일해야 합니다. 세 번째 매개변수가 있는 경우 세 번째 매개변수도 문자열이어야 하며 문자열은 자동으로 없음으로 매핑됩니다.

a = '도비는 개다'

table = str.maketrans('dobi', 'alph')

a.translate(table)

# 'alph hs a alg'

table = str.maketrans('dobi', 'alph', 'o')

a.translate(table)

# 'aph hs a ag'

문자열의 결합 및 분할

str.join(iterable)

연결된 문자열 지정 요소는 반복 가능한 문자열 객체입니다.

'-'.join(['2012', '3', '12'])

# '2012-3-12'

'-'.join([ 2012, 3, 12])

# TypeError: 시퀀스 항목 0: 예상되는 str 인스턴스, int 발견

'-'.join(['2012', '3', b'12']) #bytes는 문자열이 아닙니다

# TypeError: 시퀀스 항목 2: 예상되는 문자열 인스턴스, 바이트가 발견되었습니다

'-'.join(['2012'])
# '2012'

'-'.join([])
# ''

' -'.join([None])
# TypeError: 시퀀스 항목 0: 예상되는 str 인스턴스, NoneType 발견

'-'.join([''])
# ''

','.join({'dobi':'dog', 'polly':'bird'})
# 'dobi,polly'

','.join({ 'dobi':'dog', 'polly':'bird'}.values())
# 'dog,bird'
str.partition(sep); str.rpartition(sep)
'dog wow wow jiao'.partition('wow')
# ('dog', 'wow', 'wow jiao')

'dog wow wow jiao'.partition('dog')
# ('', 'dog', 'wow wow jiao')

'dog wow wow jiao'.partition('jiao')
# ('dog wow wow', 'jiao', '')

'dog wow wow jiao'.partition('ww')
# ('dog wow wow jiao', '', '' )


'dog wow wow jiao'.rpartition('wow')
Out[131]: ('dog wow', 'wow', 'jiao' )

'dog wow wow jiao'.rpartition('dog')
Out[132]: ('', 'dog', 'wow wow jiao')

'dog 와우 와우 jiao'.rpartition('jiao')
Out[133]: ('dog wow wow ', 'jiao', '')

'dog wow wow jiao'.rpartition('ww ')
아웃[135]: ('', '', 'dog wow wow jiao')
str.split(sep=None, maxsplit=-1); str.rsplit(sep=None, maxsplit=-1)
'1,2,3'.split(','), '1, 2, 3'.rsplit()
# (['1 ', '2', '3'], ['1,', '2,', '3'])

'1,2,3'.split(',', maxsplit=1 ),  '1,2,3'.rsplit(',', maxsplit=1)
# (['1', '2,3'], ['1,2', '3'])

'1 2 3'.split(), '1 2 3'.rsplit()
# (['1', '2', '3'], ['1', '2 ', '3'])

'1 2 3'.split(maxsplit=1), '1 2 3'.rsplit(maxsplit=1)
# (['1', '2 3'], ['1 2', '3'])

'   1   2   3   '.split()
# ['1', '2', '3']

'1,2,,3,'.split(','), '1,2,,3,'.rsplit(',')
# (['1', '2', '', '3', ''], ['1', '2', '', '3', ''])

''.split()
# []
''.split('a')
# ['']
'bcd'.split('a')
# ['bcd']
'bcd'.split( 없음)
# ['bcd']
str.splitlines([keepends])

字符串以行界符为分隔符拆分为列表;当 keepends 为True,拆分后保留行界符,能被识别的行界符见官方文档。

'ab cnnde fgrklrn'.splitlines()
# ['ab c', '', 'de fg ', 'kl']
'ab cnnde fgrklrn'.splitlines(keepends=True)
# ['ab cn', 'n', 'de fgr', 'klrn']

"".splitlines(), ''.split('n')      #注意两者的区别
# ([], [''])
"One Linen".splitlines()
# (['한 줄'], ['두 줄', ''])

字符串条件判断

str.endswith( 접미사[, 시작[, 끝]]); str.startswith(prefix[, start[, end]])
text = '외부 보호 덮개'

text.endswith('ing')
# True

text .endswith(('gin', 'ing'))
# True
text.endswith('ter', 2, 5)
# True

text.endswith('ter ', 2, 4)
# False

str.isalnum()

字符串和数字任意组合,即为真,简而言之:

只要 c.isalpha(), c.isdecimal(), c.isdigit(), c.isnumeric() 中任意一个为真,则 c.isalnum() 为真。

'dobi'.isalnum()
# True

'dobi123'.isalnum()
# True

'123'.isalnum( )
# 참

'徐'.isalnum()
# 참

'dobi_123'.isalnum()
# 거짓

'dobi 123'.isalnum()
# False

'%'.isalnum()
# False
str.isalpha()
Unicode 字符数据库中작为 “Letter”(这些字符一般具에는 "Lm", "Lt", "Lu", "Ll" 또는 "Lo"가 있습니다. 🎜># 참

'do bi'.isalpha()
# 거짓

'dobi123'.isalpha()
# 거짓

'徐' .isalpha()
# 참

str.isdecimal(); str.isdigit(); str.isnumeric()

三个方法적 区别에서 于对 유니코드 일반적으로 사용되는 标识적 真值判断范围불동:

isdecimal: Nd,
isdigit: No, Nd,

isnumeric: No , Nd, Nl

숫자와 소수의 차이점은 일부 숫자 문자열이 숫자이지만 소수가 아니라는 점입니다. 자세한 내용은 여기를 클릭하세요

num = 'u2155'
print(num)
# ⅕
num .isdecimal(), num.isdigit(), num.isnumeric()
#(False, False, True)

num = 'u00B2'
print(num)
# ²
num.isdecimal(), num.isdigit(), num.isnumeric()
# (False, True, True)

num = "1" #unicode
num .isdecimal (), num.isdigit(), num.isnumeric()
# (참, 참, 참)

num = "'Ⅶ'"
num.isdecimal(), num .isdigit (), num.isnumeric()
# (False, False, True)

num = "十"
num.isdecimal(), num.isdigit(), num.isnumeric ()
# (거짓, 거짓, 참)

num = b"1" # byte
num.isdigit() # True
num.isdecimal() # AttributeError 'bytes' 객체에 'isdecimal' 속성이 없습니다
num.isnumeric() # AttributeError 'bytes' 객체에 'isnumeric' 속성이 없습니다
str.isidentifier()

문자열이 유효함은 법적 식별자입니다.

'def'.isidentifier()
# True

'with'.isidentifier()
# True

'false'.isidentifier ()
# 참

'dobi_123'.isidentifier()
# 참

'dobi 123'.isidentifier()
# 거짓

'123'.isidentifier()
# False
str.islower()
'Xu'.islower()
# False

'ß'.islower() #독일어 대문자
# False

'a Xu'.islower()
# True

'ss'.islower()
# True

'23'.islower()
# 거짓

'Ab'.islower()
# 거짓

str.isprintable()

문자열의 모든 문자가 인쇄 가능한 문자인지 또는 문자열이 비어 있는지 판단합니다. 유니코드 문자 집합의 "기타" 및 "구분 기호" 범주에 있는 문자는 인쇄할 수 없는 문자입니다(그러나 ASCII 공백(0x20)은 포함하지 않음).

'dobi123'.isprintable()
# True

'dobi123n'.isprintable()
Out[24]: False

'dobi 123' .isprintable()
# 참

'dobi.123'.isprintable()
# 참

''.isprintable()
# 참

str.isspace()

문자열에 문자가 하나 이상 있는지, 모든 문자가 공백 문자인지 확인합니다.

인 [29]: 'rnt'.isspace()
아웃[29]: True

인 [30]: ''.isspace()
아웃[30 ]: False

In [31]: ' '.isspace()
Out[31]: True

str.istitle()

문자열의 문자가 대문자인지, 알파벳이 아닌 문자는 무시되는지 여부를 결정합니다.

'Python의 작동 방식'.istitle()
# True

'Python의 작동 방식'.istitle()
# False

'Python의 작동 방식 '.istitle()
# False

'Python의 작동 방식'.istitle()
# True

' '.istitle()
# False

''.istitle()
# 거짓

'A'.istitle()
# 참

'a'.istitle()
# 거짓

'Diaoshui Abc Def 123'.istitle()
# True
str.isupper()
'Xu'.isupper()
# False

'DOBI'.isupper()
Out[41]: True

'Dobi'.isupper()
# False

'DOBI123'.isupper()
# 참

'DOBI 123'.isupper()
# 참

'DOBIt 123'.isupper()
# 참

'DOBI_123' . isupper()
# 참

'_123'.isupper()
# 거짓

문자열 인코딩

str.encode(encoding="utf-8", 오류="엄격")

fname = 'Xu'

fname.encode('ascii')
# UnicodeEncodeError: 'ascii' 코덱은 'u5f90' 문자를 인코딩할 수 없습니다...

fname.encode('ascii', 'replace')
# b'?'

fname.encode('ascii', 'ignore')
# b''

fname.encode('ascii', 'xmlcharrefreplace')
# b'Xu'

fname.encode('ascii', 'backslashreplace')
# b'\u5f90'

Python에 내장된 문자열 분석과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 참고하세요. !

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.