Je souhaite supprimer des points dans les acronymes mais pas dans les noms de domaine dans une chaîne python. Par exemple, Je veux la chaîneQuelle est la regex pour enlever des points dans les acronymes mais pas dans les noms de domaine?
'a.b.c. [email protected] http://www.test.com'
pour devenir
'abc [email protected] http://www.test.com'
Le plus proche regex j'ai fait jusqu'à présent est
re.sub('(?:\s|\A).{1}\.',lambda s: s.group()[0:2], s)
qui se traduit à
'ab.c. [email protected] http://www.test.com'
Il semble que f ou l'expression rationnelle ci-dessus pour travailler, je dois changer l'expression rationnelle
(?:\s|\A|\G).{1}\.
mais il n'y a pas de marqueur de fin de match (\ G) en python.
EDIT: Comme je l'ai mentionné dans mon commentaire, les chaînes n'ont pas de formatage spécifique. Ces chaînes contiennent des conversations humaines informelles et peuvent donc contenir zéro, un ou plusieurs acronymes ou noms de domaine. Quelques erreurs me conviennent si cela m'éviterait de coder un "vrai" analyseur.
à mon humble avis un regex n'est pas le bon outil pour votre problème. C'est peut-être possible mais cela conduit à un code trop complexe. J'utiliserais une approche plus traditionnelle et utiliserais un mélange de regexs et de code python pour diviser la chaîne en ses composants (texte normal, acronymes, ...) et traiter les parties individuellement. Plus verbeux mais aussi plus maintenable. – sebasgo
Je devrais probablement avoir mentionné que j'utilise cela dans le cadre d'une série d'autres regex pour normaliser une séquence de chaînes représentant des conversations humaines informelles. Je peux tolérer quelques erreurs si cela m'éviterait de faire une analyse plus approfondie. – ianalis
Vous devez mieux spécifier le problème. Vos données sont toujours dans trois parties séparées par des espaces, et vous voulez seulement affecter la première partie? Ou avez-vous besoin d'appliquer cela à du texte arbitraire? Si plus tard, comment définiriez-vous un acronyme? Seulement des lettres uniques? Si oui, que prévoyez-vous avec http://a.b.example.com? Ou est-ce que vous voulez supprimer les périodes intégrées, sauf si vous savez que cela fait partie d'un nom de domaine? Mais cela ne fait que poser la question: quand fait-il partie d'un nom de domaine: Après @ ou http: //? Qu'en est-il de ssh: ou d'autres schémas d'URL? Une fois défini, n'importe lequel d'entre eux serait une regex facile. – MtnViewMark