我有資料框,我想使用正則運算式在文本上提取一些本地化。我必須提取三個值并創建三個新列。我無法匹配文本中的第一次出現。我必須始終在文本示例中的破折號之前取位置。
df["Auto localisation 1"]=df["Description"].str.extract(r"Localisation[\s]*:([^\n].*)\n")
df["Auto localisation 2"]=df["Description"].str.extract("Localisation[\s]*:.*\n([^_\n]*)\n[^\n]*\n_ ")
df["Auto localisation 3"]=df["Description"].str.extract("Localisation[\s]*:.*\n[^_\n]*\n([^\n_]*)\n")
強文本文本示例如下:
reference de piece
27.10.2020 08:49:49 JEAN BAPTISTE DAIGREMONT (ijuplo) Tél. 00
Localisation:TRAIN
PRINCIPAL GAUCHE
______________________________
Non-conformité 0001 :
Type de non-conf. : Absence couleur/peinture, pigmentation
VISITE AVION AVANT PEINTURE
Nous constatons qu'il manque du bleu
metallo sur les cosses des tresses de masses ainsi
que du gris sous les rivets suite à notre demande
de reprise.
Localisation : Sous les trappes "porte feuille
G/D"
Voir exemple en PJ.
Flamme toujours en place.
Demandons interventions pour remise en état.
______________________________
Moment de Détection: Lors de l'inspection
預期輸出:
Auto localisation 1=TRAIN
Auto localisation 2=GAUCHE
Auto localisation 3=(empty) because in this exemple there is not localisation 3
我的代碼給出了結果:
Auto localisation 1=TRAIN
Auto localisation 2=GAUCHE
Auto localisation 3=Voir exemple en PJ
怎么會導致這個問題?謝謝
uj5u.com熱心網友回復:
對于您的 3 個模式,您可以從字串的開頭開始匹配,并且不要交叉以 Localisation: 開頭的匹配行:或僅使用負前瞻的下劃線。
\A(?:(?![^\S\n]*Localisation:|[^\S\n]*_ \n).*\n)*[^\S\n]*Localisation[\s]*:([^\n].*)\n
\A(?:(?![^\S\n]*Localisation:|[^\S\n]*_ \n).*\n)*[^\S\n]*Localisation[\s]*:.*\n([^_\n]*)\n[^\n]*\n
\A(?:(?![^\S\n]*Localisation:|[^\S\n]*_ \n).*\n)*[^\S\n]*Localisation[\s]*:.*\n[^_\n]*\n([^\n_]*)\n
正則運算式演示 1 | 正則運算式演示 2 | 正則運算式演示 3
或者使用一個正則運算式和 3 個命名的捕獲組:
\A(?:(?![^\S\n]*Localisation:|[^\S\n]*_ \n).*\n)*[^\S\n]*Localisation\s*:(?P<Auto_localisation_1>[^\n].*)(?:\n[^\S\n]*(?!Localisation:)(?P<Auto_localisation_2>[^\s_].*)(?:\n[^\S\n]*(?!Localisation:)(?P<Auto_localisation_3>[^\s_].*))?)?
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377529.html
