2010-04-22 5 views
1

Étant donné que la chaîne suivante est incorporée dans le texte, comment puis-je extraire la ligne entière sans la faire correspondre à l'intérieur "<" et ">"?Regex: Ignorer/Ignorer le modèle

<test type="yippie<innertext>" /> 

EDIT:
être plus précis, nous devons traiter les deux cas d'utilisation ci-dessous où « type » a ou n'a pas « < » et caractères « > ».

<h:test type="yippie<innertext>" /> 
<h:test type="yippie"> 

Group 1: 'h:test' 
Group 2: ' type="yippie<innertext>" ' -or- ' type="yippie"' (ie, remaining content before ">" or "/>") 

Jusqu'à présent, j'ai quelque chose comme ça, mais il est un peu hors la façon dont il groupe 2 arrêts au premier « > ». Ajuster la première partie de la condition du groupe 2.

(<([a-zA-Z0-9_:-]+)([^>"]*|[^>]*?)\s*(/)?>) 

Merci pour votre aide.

Répondre

2

Essayez ceci:

<([:\w]+)(\s(?:"[^"]*"|[^/>"])+)/?> 

Exemple d'utilisation (Python):

>>> x = '<h:test type="yippie<innertext>" />' 
>>> re.search('<([:\w]+)(\s(?:"[^"]*"|[^/>"])+)/?>', x).groups() 
('h:test', ' type="yippie<innertext>" ') 

Notez également que si votre document est HTML ou XML, vous devez utiliser un analyseur HTML ou XML au lieu d'essayer de faites ceci avec des expressions régulières.

+0

Eh oui, vous êtes là-dessus. J'aurais dû être plus clair et complet. Je dois regrouper la division correspondant au nom du tag et au lot restant. Voir au dessus. – cwall

0

Il semble que vous essayiez d'analyser XML/HTML avec une regex. Je dirais que votre approche est fondamentalement erronée. Une expression rationnelle suffisamment avancée n'est pas indissociable d'un analyseur XML. Après tout, si vous avez besoin pour analyser:

<test type="yippie<inner\"text\"_with_quotes,_literal_slash_and_quote\\\">" /> 

De plus, vous avez probablement besoin d'échapper à la < intérieure et > comme &lt; et &gt;

Pour d'autres raisons pour lesquelles vous ne devriez pas parser XML avec une expression régulière, Je ne peux céder à cette réponse supérieure:

RegEx match open tags except XHTML self-contained tags

+0

J'aimerais pouvoir le faire. L'implémentation existante force ma main. – cwall

Questions connexes