Je suis relativement nouveau dans l'utilisation de Python et de Regex, et je voulais vérifier si les chaînes de caractères premier et dernier sont les mêmes.
Si le premier et le dernier caractères sont identiques, alors renvoie 'True' (Ex: 'aba ') Si le premier et le dernier caractères ne sont pas identiques, alors renvoyez 'False' (Ex: 'ab')
Voici le code, j'ai écrit:
import re string = 'aba' pattern = re.compile(r'^/w./1w$') matches = pattern.finditer(string) for match in matches print (match)
Mais à partir du code ci-dessus, je ne vois aucune sortie
5 Réponses :
Pourquoi avez-vous sur-ingénierie avec une regex? Un principe de programmation devrait être de rester simple comme:
string[0] is string[-1]
Ou y a-t-il besoin d'une expression régulière?
Merci @Tobias, mais j'analyserais beaucoup de données en lisant des fichiers en Python pour lesquels je pense que Regex serait plus approprié. Aussi String [0] = String [-1] le travail considère n'importe quoi et ne se limite pas spécifiquement aux alphabets (ce qui signifie ne fonctionnerait que pour des données propres). Par conséquent, vous recherchez spécifiquement une implémentation de regex
Je pense que c'est l'expression régulière que vous essayez d'exécuter:
Code:
aba
Sortie:
import re string = 'aba' pattern = re.compile(r'^(\w).(\1)$') matches = pattern.finditer(string) for match in matches: print (match.group(0))
Merci Omkar, cela a vraiment fonctionné. Je suppose que nous faisons juste correspondre le premier caractère avec la première occurrence à la fin de la chaîne? Ma compréhension est-elle correcte?
@bzflag Oui. Nous avons groupé le premier caractère en utilisant (), puis mis en correspondance le premier groupe avec \ 1
La réponse ci-dessus de @Tobias est parfaite et simple, mais si vous voulez une solution utilisant des regex, essayez le code ci-dessous.
Essayez ce code!
Code:
<_sre.SRE_Match object; span=(0, 7), match='abbaaaa'>
Sortie:
import re string = 'abbaaaa' pattern = re.compile(r'^(.).*\1$') matches = pattern.finditer(string) for match in matches: print (match)
si et seulement si vous voulez vraiment utiliser regex (à des fins d'apprentissage):
same
sortie:
string = 'aba' if string[0] == string[-1]: print 'same'
Explications:
^(.).*\1$
^ ancre de début de ligne (.) correspond au premier caractère de la ligne et le stocke dans un groupe . * correspond à n'importe quel caractère à tout moment \ 1 backreference au premier groupe, dans ce cas le premier caractère pour imposer que le premier caractère et le dernier soient égaux $ ancre de fin de ligne Démo: https://regex101.com/r/DaOPEl/1/
Sinon, la meilleure approche consiste simplement à utiliser la comparaison string [0] == string [-1]
ok nok
si vous voulez vérifier avec regex utilisez ci-dessous:
import re
string = 'aba is a cowa'
pat = r'^(.).*\1$'
re.findall(pat,string)
if re.findall(pat,string):
print(string)
cela correspondra au premier et au dernier caractère de la ligne ou de la chaîne s'ils correspondent, puis il renvoie le caractère correspondant dans ce cas, il affichera la chaîne de la ligne sinon il sautera
L'expression régulière doit être
^ (.). * \ 1 $. Je ne suis pas sûr des fonctions utilisées.