2010-09-28 2 views
0

Désolé, je sais que c'est probablement un doublon mais ayant recherché 'python regular expression match entre' Je n'ai rien trouvé qui répond à ma question!Expression régulière pour une chaîne entre deux chaînes?

Le document (qui à préciser, est une longue page HTML) Je cherche a tout un tas de cordes dedans (dans une fonction JavaScript) qui ressemble à ceci:

link: '/Hidden/SidebySideGreen/dei1=1204970159862'}; 
link: '/Hidden/SidebySideYellow/dei1=1204970159862'}; 

Je veux extraire les liens (c'est-à-dire tout entre guillemets dans ces chaînes) - par exemple /Hidden/SidebySideYellow/dei1=1204970159862

Pour obtenir les liens, je sais que je dois commencer par:

re.matchall(regexp, doc_sting) 

Mais ce qui devrait être regexp?

+0

Travaillez-vous avec JSON par hasard? –

+0

On dirait des données JSON avec ';' au lieu de ',' pour moi (quand j'essaie d'imaginer le reste du document). Python a intégré le support JSON. – Residuum

+0

c'est une longue page HTML qui contient du javascript – AP257

Répondre

3

La réponse à votre question dépend de l'apparence du reste de la chaîne. Si elles sont toutes comme ça link: '<URL>'}; alors vous pouvez le faire très simple en utilisant la manipulation de chaînes simple:

myString = "link: '/Hidden/SidebySideGreen/dei1=1204970159862'};" 
print(myString[7:-3]) 

(Si vous avez juste une chaîne avec plusieurs lignes par là, vous pouvez simplement diviser la chaîne en lignes.

Si c'est un peu plus complexe, l'utilisation d'expressions régulières est correcte. Un exemple qui semble juste pour l'URL à l'intérieur des citations serait:

myDoc = """link: '/Hidden/SidebySideGreen/dei1=1204970159862'}; 
link: '/Hidden/SidebySideYellow/dei1=1204970159862'};""" 

print(re.findall("'([^']+)'", myDoc)) 

Selon la façon dont la chaîne entière semble, vous devrez peut-être inclure le link: ainsi:

print(re.findall("link: '([^']+)'", myDoc)) 
1

Je commence par:

regexp = "'([^']+)'"

Et vérifier si cela fonctionne bien - je veux dire, si la seule condition est que la chaîne est dans une ligne entre « », il devrait être bon qu'il est.

0

Utilisez quelques Séparations simples

>>> s="link: '/Hidden/SidebySideGreen/dei1=1204970159862'};" 
>>> s.split("'") 
['link: ', '/Hidden/SidebySideGreen/dei1=1204970159862', '};'] 
>>> for i in s.split("'"): 
...  if "/" in i: 
...   print i 
... 
/Hidden/SidebySideGreen/dei1=1204970159862 
>>> 
Questions connexes