7
votes

Vérifiez le cas de chameau à Python

Je voudrais vérifier si une chaîne est une affaire de chameau ou non (Boolean). Je suis enclin à utiliser une regex mais toute autre solution élégante fonctionnerait. J'ai écrit une simple regex xxx pré>

serait-ce correct? Ou est-ce que je manque quelque chose? P>

Modifier strong> p>

Je voudrais capturer des noms dans une collection de documents texte du format P>

(?:[A-Z])(?:\S?)+(?:[A-Z])(?:[a-z])+


15 commentaires

C'est une sorte de chose difficile à déterminer de manière programmative. Est chameau cas de chameau? Qu'en est-il de _camel , chameau , _camel , constcamel , html ou var_camelcase ? Il est assez difficile de définir à moins que vous sachiez à l'avance ce que le formatage est.


@Davidnehme Pas vraiment, je l'ai vérifié et mes exigences sont différentes /


@ SR2222 Que voulez-vous dire par formatage? Je cherche à capturer des noms comme McGauge, Lepierre, etc. dans un texte. J'espère que cela ajoute plus de contexte.


@mcenley, puis spécifie vos exigences?


@mcenley Qu'en est-il de O'Connor?


@Qtax La regex sur le lien ne traite pas d'une fonction booléenne de capture camelcase, mais plutôt un remplacement de camelcase à camel_case. Je me trompe peut-être ici si je n'ai pas compris la question sur le lien DUP correctement.


@AgF Oui, je voudrais capturer ceux-ci aussi. Aussi quelque chose comme "T.Mildred"


Donc, cela a moins à voir avec Camelcase et plus à voir avec l'identification des noms appropriés?


@ SR2222 AH, oui. L'hypothèse en cours de vérification de l'affaire Camel (avec d'autres "fonctionnalités") aiderait ma tâche.


Alors qu'est-ce qui ne va pas avec une jeton qui commence par une lettre majuscule et contient n autres personnages? Le seul véritable astuce consiste à éviter d'autres noms et mots appropriés au début des phrases qui ne sont pas des noms.


On pourrait capturer des cordes comme «l'article», etc. Vérification des noms de chameau à chameau offrirait de meilleures perspectives.


Mais un nom comme Bill Williams obtiendra par votre filtre ... Dans tous les cas, qu'en est-il de n'importe quel jeton commençant par une capitale et contenant une deuxième capitale non contiguë à la première?


@ SR2222 Yup, vous avez frappé le clou. La regex est-elle correcte?


Laissez-nous Continuer cette discussion en chat


Que diriez-vous d'exemples d'intrants que vous souhaitez échouer?


8 Réponses :


3
votes

Vous voulez probablement quelque chose de plus comme: xxx

altho qui permettrait à toutes les capsules. Vous pouvez éviter cela avec: xxx

ancrez l'expression avec ^ et $ ou \ z si nécessaire.


0 commentaires

19
votes

Vous pouvez vérifier si une chaîne a à la fois supérieure et minuscule.

camel False
camelCase True
CamelCase True
CAMELCASE False
camelcase False
Camelcase True
Case True
camel_case False


6 commentaires

Sûrement cela ne fonctionne pas? Camelcase n'est pas valide et retournera vrai.


Cela dépend si vous voulez permettre aux acronymes. par exemple. décodergb ou décodergb


Cela renvoie false pour _camelcase


Pourquoi est-ce la réponse acceptée? Ce n'est pas correct


Ne gère pas non plus le nombre de numériques ni de la ponctuation.


Devrait-il également être un chèque pour .isalnum () ? Et aussi un chèque que la chaîne ne commence pas avec un numéro?



0
votes

Je pense que vous pourriez vous échapper simplement avec juste vérifier que la chaîne a une capitale avec une lettre minuscule avant elle si (ligne = ~ m / [A-Z] [A-Z] /). Il suffit de vérifier que le bas et la majuscule échoue sur les exemples donnés. ~ BEN


1 commentaires

J'ai modifié ma regex dans la question initiale.



0
votes
sub_string= 'hiSantyWhereAreYou'  `Change the string here and try`
index=[x for x,y in enumerate(list(sub_string)) if(y.isupper())] `Finding the index 
of caps`
camel_=[]
temp=0
for m in index:
    camel_.append(sub_string[temp:m])
    temp=m
if(len(index)>0):
    camel_.append(sub_string[index[-1]::])
    print('The individual camel case words are', camel_) `Output is in list`
else:
    camel_.append(sub_string)
    print('The given string is not camel Case')

1 commentaires

Pourriez-vous s'il vous plaît ajouter des explications sur comment et pourquoi votre code de code fournit une réponse à la question? Merci.



2
votes

Convertissez votre chaîne en cas de chameau à l'aide d'une bibliothèque comme inflexion Code> . Si cela ne change pas, cela devait déjà être un cas de chameau.

from inflection import camelize

def is_camel_case(s):
    # return True for both 'CamelCase' and 'camelCase'
    return camelize(s) == s or camelize(s, False) == s


0 commentaires

0
votes

Si vous ne voulez pas de chaînes commençant par E. / code> en majuscule code> et camelcase code> pour passer vrai code>. Modifier @ Réponse de William:

camel False
camelCase True
CamelCase True
CAMELCASE False
camelcase False
Camelcase False
Case False
camel_case False


0 commentaires

0
votes

Cette solution de regex a fonctionné pour mon étui d'utilisation ([A-Z] [A-Z \ S] +) ([A-Z] [A-Z] +)


0 commentaires

0
votes

camelcase

est la pratique des phrases d'écriture sans espaces ni ponctuation, indiquant la séparation des mots avec un lettre de majuscule xxx

  1. Recherchez la chaîne pour d'autres signes que Charactres et stocker dans non_alpha
  2. remplacez tous les signes non_alpha avec espace vide et divisez-les par un espace vide pour créer Substrings
  3. Vérifiez que toutes les soustractions ne sont pas entièrement majuscules et sinon l'index de la majuscule ne peut pas être> 0

    sortie xxx


0 commentaires