3
votes

Comment utiliser regex pour savoir si le premier et le dernier caractère d'une chaîne correspondent?

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


1 commentaires

L'expression régulière doit être ^ (.). * \ 1 $ . Je ne suis pas sûr des fonctions utilisées.


5 Réponses :


5
votes

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?


1 commentaires

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



1
votes

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))


2 commentaires

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



2
votes

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)


0 commentaires

3
votes

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


0 commentaires

0
votes

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


0 commentaires