Tout d'abord, je suis au courant des questions similaires qui ont été posées comme ici:Java Pattern.split() avec chevauchement delimiters
How to split a string, but also keep the delimiters?
Cependant, je vais avoir une scission question la mise en œuvre d'un chaîne utilisant Pattern.split() où le modèle est basé sur une liste de délimiteurs, mais où ils peuvent parfois sembler se chevaucher. Voici l'exemple:
L'objectif est de diviser une chaîne basée sur un ensemble de mots de code connus qui sont entourés par des barres obliques, où je dois garder le délimiteur (mot de code) lui-même et la valeur après (qui peut être chaîne vide).
Pour cet exemple, les mots de code sont les suivants:
/ABC/
/DEF/
/GHI/
Basé sur le fil mentionné ci-dessus, le modèle est construit comme suit à l'aide d'anticipation et regarder en arrière pour tokenise la chaîne en mots de code et les valeurs:
((?<=/ABC/)|(?=/ABC/))|((?<=/DEF/)|(?=/DEF/))|((?<=/GHI/)|(?=/GHI/))
chaîne de travail:
"123/ABC//DEF/456/GHI/789"
En utilisant Split, ce tokenises nic ely à:
"123","/ABC/","/DEF/","456","/GHI/","789"
chaîne de problème (notez slash unique entre "ABC" et "DEF"):
"123/ABC/DEF/456/GHI/789"
Ici, l'attente est que "DEF/456" est la valeur après «/ABC/"codeword parce que le bit" DEF/"n'est pas réellement un mot de code, mais arrive juste à ressembler à un!
résultat souhaité est:
"123","/ABC/","DEF/456","/GHI/","789"
résultat réel est:
"123","/ABC","/","DEF/","456","/GHI/","789"
Comme vous pouvez le voir, la barre oblique entre "ABC" et "DEF" est isolé se comme un signe lui-même.
J'ai essayé des solutions selon l'autre thread en utilisant uniquement le look-ahead OU look-behind, mais ils semblent tous souffrir du même problème. Toute aide appréciée!
À un certain point votre regex devient tellement alambiquée que vous feriez mieux d'écrire une méthode simple pour parcourir le 'String' et l'analyser ... –
Avec la méthode look-ahead + look-behind, je veux le" 789 "être séparé, comme dans l'exemple de" chaîne de travail "(plus tard, je" réassemble "les mots de code et les valeurs de la liste de jetons en un tableau associatif). –
@BoristheSpider - point pris, cependant l'approche de la segmentation de la chaîne en un "simple hit" semblait être un moyen sûr et efficace d'extraire les jetons/valeurs. La liste de mots de code est également configurable, donc cette regex est construite dynamiquement et je suis un peu moins intéressé par la complexité de son fonctionnement (tant qu'il fonctionne). –