Il existe une chaîne contenant des chiffres et des caractères.
J'ai besoin de trouver un nombre entier (dans cette chaîne) qui contient le numéro 467033. par exemple. 1.467033777777777Rechercher dans une chaîne en Python
Merci
Il existe une chaîne contenant des chiffres et des caractères.
J'ai besoin de trouver un nombre entier (dans cette chaîne) qui contient le numéro 467033. par exemple. 1.467033777777777Rechercher dans une chaîne en Python
Merci
Si vous êtes juste la recherche d'un sous-chaîne dans une autre sous-chaîne, vous pouvez utiliser in
:
>>> sub_num = "467033"
>>> my_num = "1.467033777777777"
>>> sub_num in my_num
True
Cependant, je pense qu'il ya plus à votre problème que juste des chaînes à la recherche, et cela pourrait ne pas être optimal. Pouvez-vous être plus précis sur ce que vous essayez de faire?
import re
a = 'e.g. 1.467033777777777\nand also 576575567467033546.90 Thanks '
r = re.compile('[0-9.]*467033[0-9.]*')
r.findall(a)
['1.467033777777777', '576575567467033546.90']
et 8146.70337777? – eyquem
Eh bien, je supposais que vous en aviez besoin avant ou après la virgule. Le plus simple serait d'écrire un certain nombre de regexes parallèles, et python devrait le compiler de façon optimale. – highBandWidth
Essayez ceci:
import re
RE_NUM = re.compile('(\d*\.\d+)', re.M)
text = 'eghwodugo83o135.13508yegn1.4670337777777773u87208t'
for num in RE_NUM.findall(text):
if '467033' in num:
print num
Prints:
1.4670337777777773
/Generalized optimisés en réponse au commentaire:
def find(text, numbers):
pattern = '|'.join('[\d.]*%s[\d.]*' % n for n in numbers)
re_num = re.compile(pattern, re.M)
return [m.group() for m in re_num.finditer(text)]
print find(text, ['467033', '13'])
Impressions:
['135.13508', '1.4670337777777773']
Ceci est un exemple décent mais peut-être coûteux en fonction de l'ensemble de données. Puisque vous scannez déjà la chaîne avec re, vous pourriez aussi bien faire cuire la valeur sentinelle dans le motif. – jathanism
Oui, je suis allé pour la simplicité sur la performance - juste mis à jour la réponse avec quelque chose de plus général, pour rechercher plusieurs numéros en une seule passe. – samplebias
Je ne comprends pas la remarque de jathanism -.- Dans le premier code, je ferais: '' si '467033' dans num.replace ('.', '') '' Le deuxième code empêche de faire cela. Mais peut-être n'y a-t-il pas besoin de le faire, selon ce qu'il veut. – eyquem
Est-il possible d'obtenir quelques lignes de données réelles pour vous donner une réponse plus pertinente? –
Merci beaucoup, mais je l'ai fait! – Nick