ฉันจะแยกและแยกวิเคราะห์สตริงใน Python ได้อย่างไร


107

ฉันพยายามแยกสตริงนี้ใน python: 2.7.0_bf4fda703454

ฉันต้องการแยกสตริงนั้นที่ขีดล่าง_เพื่อที่ฉันจะได้ใช้ค่าทางด้านซ้าย


อ่านpartitionวิธีการของสตริงแล้วอัปเดตคำถามของคุณ
ล็อต

คำตอบ:


141

"2.7.0_bf4fda703454".split("_") ให้รายการสตริง:

In [1]: "2.7.0_bf4fda703454".split("_")
Out[1]: ['2.7.0', 'bf4fda703454']

ซึ่งจะแยกสตริงที่ขีดล่างทุกเส้น หากคุณต้องการให้หยุดหลังจากการแยกครั้งแรกให้ใช้"2.7.0_bf4fda703454".split("_", 1)หากคุณต้องการที่จะหยุดหลังจากที่แยกแรกที่ใช้

หากคุณทราบข้อเท็จจริงว่าสตริงมีขีดล่างคุณยังสามารถแกะ LHS และ RHS ออกเป็นตัวแปรแยกกันได้:

In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1)

In [9]: lhs
Out[9]: '2.7.0'

In [10]: rhs
Out[10]: 'bf4fda703454'

partition()ทางเลือกคือการใช้งาน การใช้งานจะคล้ายกับตัวอย่างสุดท้ายยกเว้นว่าจะส่งคืนส่วนประกอบสามส่วนแทนที่จะเป็นสอง ข้อได้เปรียบหลักคือวิธีนี้จะไม่ล้มเหลวหากสตริงไม่มีตัวคั่น


83

คำแนะนำการแยกวิเคราะห์สตริง Python

แยกสตริงในช่องว่างรับรายการแสดงประเภทพิมพ์ออกมา:

el@apollo:~/foo$ python
>>> mystring = "What does the fox say?"

>>> mylist = mystring.split(" ")

>>> print type(mylist)
<type 'list'>

>>> print mylist
['What', 'does', 'the', 'fox', 'say?']

หากคุณมีตัวคั่นสองตัวติดกันจะถือว่าสตริงว่าง:

el@apollo:~/foo$ python
>>> mystring = "its  so   fluffy   im gonna    DIE!!!"

>>> print mystring.split(" ")
['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!']

แยกสตริงที่ขีดล่างและคว้ารายการที่ 5 ในรายการ:

el@apollo:~/foo$ python
>>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor."

>>> mystring.split("_")[4]
"Kowalski's"

ยุบหลายช่องว่างให้เป็นหนึ่งเดียว

el@apollo:~/foo$ python
>>> mystring = 'collapse    these       spaces'

>>> mycollapsedstring = ' '.join(mystring.split())

>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']

เมื่อคุณไม่ส่งพารามิเตอร์ไปยังเมธอดการแบ่งของ Python เอกสารจะระบุว่า : "การรันของช่องว่างที่ต่อเนื่องกันจะถือเป็นตัวคั่นเดียวและผลลัพธ์จะไม่มีสตริงว่างที่จุดเริ่มต้นหรือจุดสิ้นสุดหากสตริงมีช่องว่างนำหน้าหรือต่อท้าย"

จับเด็กผู้ชายสวมหมวกของคุณแยกวิเคราะห์ด้วยการแสดงออกปกติ:

el@apollo:~/foo$ python
>>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz'
>>> import re
>>> mylist = re.split("[a-m]+", mystring)
>>> print mylist
['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz']

การแสดงออกปกติ "[AM] +" หมายถึงอักษรตัวพิมพ์เล็กaผ่านmที่เกิดขึ้นหนึ่งครั้งหรือมากกว่าจะถูกจับคู่เป็นตัวคั่น reเป็นไลบรารีที่จะนำเข้า

หรือหากคุณต้องการสับรายการทีละรายการ:

el@apollo:~/foo$ python
>>> mystring = "theres coffee in that nebula"

>>> mytuple = mystring.partition(" ")

>>> print type(mytuple)
<type 'tuple'>

>>> print mytuple
('theres', ' ', 'coffee in that nebula')

>>> print mytuple[0]
theres

>>> print mytuple[2]
coffee in that nebula

18

ถ้ามันจะเป็นการแยก LHS / RHS เสมอคุณยังสามารถใช้partitionวิธีการที่สร้างขึ้นในสตริง มันจะส่งคืน 3-tuple ราวกับ(LHS, separator, RHS)ว่าพบตัวคั่นและ(original_string, '', '')ถ้าไม่มีตัวคั่น:

>>> "2.7.0_bf4fda703454".partition('_')
('2.7.0', '_', 'bf4fda703454')

>>> "shazam".partition("_")
('shazam', '', '')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.