2012-09-01 3 views
0

J'ai une chaîne comme celui-ci (les hashtags sont délimiteurs)utilisant l'expression rationnelle à Split chaîne

A1###B2###C3###12345.jpg 

Je me demandais comment pourrais-je accéder à A1, B2 et C3

STRING1###STRING2###STRING3###STRING4.jpg 
SOME###THING###HERE###MEH.jpg 
EXTRACT###THIS###PLEASE###pah.jpg 

Dans un cas Je voudrais extraire la première chaîne. Dans un autre le second, dans un autre le troisième. Je vais utiliser cela avec Adobe Bridge pour extraire des éléments de métadonnées du fichier

Je Boucler dans chaque nomdefichiercompletseradonc si besoin

Var1 = FirstString 
Var2 = SecondString 
Var3 = ThirdString 
+2

Quelque chose? Vraiment? Pourraient-ils être «B2» ou «C3»? Sont-ils fixes longueur? Quelle langue utilisez-vous? – Oded

+1

Qui déprécie les réponses? Ils répondent à la question comme écrite. – OrangeDog

+0

https://i.chzbgr.com/completestore/12/8/21/uEYRq9DvQUOanGpesRk_eQ2.png – OrangeDog

Répondre

2
[^#]+(?=###) 

correspondra à tous les sous-chaînes dans vos cordes qui sont suivies par ###

>>> s = "STRING1###STRING2###STRING3###STRING4.jpg" 
>>> import re 
>>> re.findall("[^#]+(?=###)", s) 
['STRING1', 'STRING2', 'STRING3'] 

Ou, pour l'exemple dans votre commentaire:

>>> s = "Slayer###Reading Festival###James###123.jpg" 
>>> artist, event, photographer = re.findall("[^#]+(?=###)", s) 
>>> artist 
'Slayer' 
>>> event 
'Reading Festival' 
>>> photographer 
'James' 

En supposant que Adobe Bridge a une ECMAScript- moteur de script basé, vous pouvez utiliser une expression rationnelle différente:

var myregexp = /^([^#]+)###([^#]+)###([^#]+)###/; 
var match = myregexp.exec(subject); 
if (match != null) { 
    artist = match[1]; 
    event = match[2]; 
    photographer = match[3]; 
} 
+0

Alors disons que j'ai Slayer ### Reading Festival ### James ### 123.jpg. Comment est-ce que j'assignerais Slayer à l'artiste variable, Reading Festival à l'événement et James au photographe? – pee2pee

+0

@JanuszJasinski: Voir mes modifications. (La langue utilisée est Python, vous n'avez pas spécifié la langue que vous utiliseriez, donc j'ai choisi celui que je connais le mieux.) –

+1

Je l'utilise dans Adobe Bridge JavaScript (JSX) – pee2pee

-1

Ce serait l'expression régulière:

(A1).*(B2).*(C3).*\.jpg 

Cette va capturer les trois parties que vous voulez, tout en ignorant le reste de la chaîne.

Pour accéder aux pièces, il suffit d'utiliser \ 1, \ 2 \, \ 3 respectivement.

+0

je devrais être plus clair STRING1 ### STRING2 ### STRING3 ### STRING4.jpg Dans un cas, je voudrais extraire la première chaîne. Dans un autre le second, dans un autre le troisième. Je vais l'utiliser avec Adobe Bridge pour extraire les éléments de métadonnées à partir du nom de fichier – pee2pee

+0

Non, c'est faux. Vous ne pouvez utiliser que des éléments tels que '1 \,' \ 2' et '\ 3 'dans le même motif, pas en dehors de celui-ci, et même seulement dans certaines versions de langages d'appariement. – tchrist