0
votes

Recherche de caractères entre deux délimiteurs dans une chaîne

J'essaie d'analyser une chaîne pour trouver tous les caractères entre deux délimiteurs code> et code> code>.

J'ai tenté d'utiliser des expressions régulières, mais je n'arrive pas à comprendre ce qui se passe. p>

ma tentative: p> xxx pré>

où Procréed_df ["question"] [2] code> est la chaîne (cette chaîne est continue, je l'ai tapé dans plusieurs lignes pour la lisibilité): p>

 test_string = '<code> this is a test </code>'


2 commentaires

Je ne vois pas dans cette chaîne d'échantillon.


Je m'excuse, je l'ai accidentellement supprimé lors de la coupe et du collage. Je l'ai corrigé.


3 Réponses :


2
votes

Je pense que le problème est le caractère NEWLINE \ N, assurez-vous simplement de correspondre à l'aide du drapeau dotall code> tel que

import re
regex = r"<code>(.*)\<\/code>"

test_str = ("<code>for x in finallist:\\n    matchinfo = \n"
    " requests.get(\"https://api.opendota.com/api/matches/{}\".format(x)).json() \n"
    " [\"match_id\"]\\n    print(matchinfo)\\n</code>\n")

re.findall(regex, test_str, re.DOTALL)

'for x in finallist:\\n    matchinfo = \n requests.get("https://api.opendota.com/api/matches/{}".format(x)).json() \n ["match_id"]\\n    print(matchinfo)\\n'


2 commentaires

dotall seul suffit.


@blhsing, noté et enlevé.



1
votes

La question ne dit pas explicitement que cela nécessite expressions régulières . Avec cela, je dirais que je ne les utiliserais pas est le meilleur:

par exemple xxx


0 commentaires

3
votes

Votre pourrait être meilleur avec un analyseur HTML que REGEX

import lxml.html

html_snippet = """
 ...
 <p>Some stuff</p>
 ...
 <code>for x in finallist:\n    matchinfo = 
 requests.get("https://api.opendota.com/api/matches/{}".format(x)).json() 
 ["match_id"]\n    print(matchinfo)\n</code>
 ...
 And some Stuff
 ...
 another code block <br />
 <code>
    print('Hello world')
 </code>
 """

dom = lxml.html.fromstring(html_snippet)
codes = dom.xpath('//code')


for code in codes:
    print(code.text)

 >>>> for x in finallist:
 >>>>     matchinfo = 
 >>>> requests.get("https://api.opendota.com/api/matches/{}".format(x)).json() 
 >>>> ["match_id"]
 >>>>    print(matchinfo)

 >>>> print('Hello world')


1 commentaires

Cette solution fonctionnerait-elle s'il existe plusieurs blocs de code dans l'extrait HTML? J'essaie de capturer plusieurs blocs de code dans une seule chaîne et d'extraire des fonctionnalités de chaque section du code.