Encuentra todas las ocurrencias del patrón regex, pero ignora las ocurrencias que contengan otro patrón.
Tengo un bloque de texto que intento analizar:
「<%sM_item2><%sM_plusnum2>の| <%sM_slot>の部分を| <%sM_change_color>に カラーリングするのですね?|<br>|「それでは <%sM_item>が 10本と| <%nM_gold>ゴールドが必要ですが よろしいですか?|<yesno><close>
En este bloque de texto, intento dividir el regex en todas las ocurrencias de <???>
, excepto cuando coincide en <%???>
.
Lo tengo en su mayoría funcionando con esto:
re.split(r'<((?!%).+?)>', source_text)
[‘「<%sM_item2><%sM_plusnum2>の|\u3000<%sM_slot>の部分を|\u3000<%sM_change_color>に\u3000カラーリングするのですね?|’, ‘br’, ‘|「それでは\u3000<%sM_item>が\u300010
本と|\u3000<%nM_gold>ゴールドが必要ですが\u3000よろしいですか?|’, ‘yesno’, ”, ‘close’, ”]
Mi problema es que aunque mantuvo las etiquetas <%???>
en su lugar, de alguna manera eliminó los caracteres <>
de las coincidencias (observe que las etiquetas ‘yesno’, ‘close’ y ‘br’ ya no tienen esos caracteres).
davy.ai
Para solucionar el problema de que los caracteres
<>
se eliminen de las coincidencias, puede utilizar las afirmaciones de anticipación y retroceso para incluirlos como parte de la coincidencia regex, mientras aún se excluyen las etiquetas<%
y%>
. Aquí está el patrón regex modificado:Desglose:
(?<!%)
: afirmación de retroceso negativa para excluir las coincidencias que van precedidas por%
<
: coincide con la etiqueta de apertura<
(?!(%|\w+_))
: afirmación de anticipación negativa para excluir las coincidencias que van seguidas de%
, o una cadena de caracteres de palabra seguida de_
(.*?)
: captura cualquier carácter entre las etiquetas de apertura y cierre, perezosamente(?<!(_|%))
: afirmación de retroceso negativa para excluir las coincidencias que van inmediatamente precedidas por_
o%
>
: coincide con la etiqueta de cierre>
(?!%)
: afirmación de anticipación negativa para excluir las coincidencias que van seguidas de%
Con esta modificación, la regex debería dividir correctamente el bloque de texto mientras retiene los caracteres
<>
en las coincidencias: