Maison  >  Article  >  développement back-end  >  Python divise les chaînes pour n'importe quel nombre de délimiteurs (code joint)

Python divise les chaînes pour n'importe quel nombre de délimiteurs (code joint)

不言
不言avant
2018-11-27 15:50:153077parcourir

Le contenu de cet article concerne le fractionnement de chaînes Python avec n'importe quel nombre de délimiteurs (avec du code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

1. Exigences

Nous devons diviser la chaîne en différents champs, mais les délimiteurs (et les espaces entre les délimiteurs) ne sont pas cohérents dans la chaîne entière.

2. Solution

La méthode split() de l'objet chaîne ne peut gérer que des situations très simples et ne prend pas en charge plusieurs délimiteurs. Vous ne pouvez rien faire avec l'espace. situation. Lorsque des fonctions plus flexibles sont nécessaires, la méthode re.split() doit être utilisée :

import re
line='abc def ; ghi, jkl,mno, pkr'
#分隔符:分号,都逗号,空格符,前后可以跟着任意数量的额外空格
result=re.split(r'\s*[;,\s]\s*',line)
print(result)

Résultat :

['abc', 'def', 'ghi', 'jkl', 'mno', 'pkr']

3. Analyse

re.split() est utile car plusieurs modèles peuvent être spécifiés pour les séparateurs. Par exemple, dans la solution ci-dessus, les délimiteurs sont : point-virgule, virgule, espace et peuvent être suivis de n'importe quel nombre d'espaces supplémentaires. Identique au résultat obtenu par str.split(), le résultat final est une liste de champs.

Lorsque vous utilisez re.split(), vous devez faire attention à ce que le groupe de capture dans le modèle d'expression régulière soit inclus entre parenthèses.

Si des groupes de capture sont utilisés, le texte correspondant sera également inclus dans le résultat final. Par exemple, jetez un œil au cas suivant :

import re
line='abc def ; ghi, jkl,mno, pkr'
result=re.split(r'\s*(;|,|\s)\s*',line)
print(result)

Résultat :

['abc', ' ', 'def', ';', 'ghi', ',', 'jkl', ',', 'mno', ',', 'pkr']

Il peut également être utile d'obtenir le délimiteur dans un contexte spécifique. Par exemple, utilisez des caractères délimiteurs pour améliorer la sortie des chaînes :

import re
line='abc def ; ghi, jkl,mno, pkr'
result=re.split(r'\s*(;|,|\s)\s*',line)

values=result[::2]
delimiters=result[1::2]+['']

print(values)
print(delimiters)

last=''.join(v+d for v,d in zip(values,delimiters))
print(last)

Résultat :

['abc', 'def', 'ghi', 'jkl', 'mno', 'pkr']
[' ', ';', ',', ',', ',', '']
abc def;ghi,jkl,mno,pkr

Si vous ne souhaitez pas voir de caractères délimiteurs dans les résultats, mais que vous souhaitez tout de même pour utiliser des symboles pour corriger l'expression régulière. Pour regrouper les modèles d'expression, assurez-vous d'utiliser un groupe non capturant, spécifié sous la forme de (?:...). L'exemple est le suivant :

import re
line='abc def ; ghi, jkl,mno, pkr'
result=re.split(r'\s*(?:;|,|\s)\s*',line)

print(result)

Résultat :

['abc', 'def', 'ghi', 'jkl', 'mno', 'pkr']

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer