ekspresi reguler dalam string panda (split)

Oct 28 2020

Halo, saya memiliki string seperti:

liste_to_split=['NW_011625257.1_0','scaffold1_3','scaffold3']

dan saya ingin membaginya saat Number_Numbersaya mencoba:

for i in liste_to_split:
 i.split(r'(?<=[0-9])_')

dan saya dapat

['NW_011625257.1_0']
['scaffold1_3']
['scaffold3']

dari pada

['NW_011625257.1'] ['0']
['scaffold1'] ['3']
['scaffold3']

apakah seseorang tahu di mana masalahnya?

Jawaban

1 anubhava Oct 28 2020 at 17:27

Anda dapat menggunakan:

>>> import re
>>> liste_to_split=['NW_011625257.1_0','scaffold1_3','scaffold3']
>>> 
>>> for i in liste_to_split:
...     re.split(r'(?<=[0-9])_', i)
...
['NW_011625257.1', '0']
['scaffold1', '3']
['scaffold3']

Perhatikan penggunaan re.splitalih - alih string.splitdan gunakan _pernyataan lookbehind luar untuk memastikan kita tidak memisahkan pada kecocokan lebar nol.


Berdasarkan komentar OP di bawah ini, sepertinya OP ingin melakukan pemisahan ini untuk sebuah dataframekolom. Dalam kasus itu gunakan:

Dengan asumsi ini adalah kerangka data Anda:

>>> print (df)
             column
0  NW_011625257.1_0
1       scaffold1_3
2         scaffold3

Kemudian Anda dapat menggunakan:

>>> print (df['column'].str.split(r'(?<=[0-9])_', expand=True))
                0     1
0  NW_011625257.1     0
1       scaffold1     3
2       scaffold3  None
1 Noname Oct 28 2020 at 17:39
l=['NW_011625257.1_0','scaffold1_3','scaffold3']

for i in l:
  f = i.split('_')
  print(f) 

keluaran

['NW', '011625257.1', '0']
['scaffold1', '3']
['scaffold3']