2016-09-23 5 views
-2

Ich brauche Inhalt von unten Abfrage, die mit [PT] endet und auch in dem Text, der $ am Ende hat.Regex, um alles dazwischen zu bekommen

17 and (am restaur$ or food$[]produc$)[PT] 
*neo$ & (bruch$ | curl$ | hair$)[PT] 
(computer$ or software$ or hardware$ or peripheral$ or conductor$)[PT] 

Erwartetes Ergebnis: am restaur, Lebensmittel, Produk ...

ich versuchte unter REGEX

(?<=[(])(.*)(?=([)][[]PT)) 

es nur Text zwischen [PT]

+0

Nun, könnten Sie erklären, was Sie versucht haben - das klären würde, was Sie erreichen wollen. Welches Tag ist relevant: JS oder C#? –

+0

Ok, du benutzt C#. Probieren Sie 'Regex.Matches (str, @" \ w + (? = \ $) ")' –

+0

Beachten Sie, dass '* neo $' nicht innerhalb '(....)' ist und Sie versucht haben, den Teilstring zwischen Klammern zu erhalten. Etwas hier klickt einfach nicht. Sorry, deine Frage ist noch unklar. –

Antwort

0

Versuchen gibt der folgende reguläre Ausdruck (Javascript),

k.match(/(\w*)\$/g).join("").split("$"); 

wobei k Ihre Zeichenfolge enthält zB: k = "17 and (restaur$ or food$[]produc$)[PT]"; Hier werden \w alle Wortzeichen und Match-Funktion alle Übereinstimmungen aus der Zeichenfolge zurückgegeben.

0

Das folgende Code-Snippet verwendet 2 Regex-Muster.
Der erste, um den PT-Inhalt zu erhalten.
Und die zweite, um die Werte aus diesen Übereinstimmungen zu erhalten.

var str = "17 and (restaur$ or food$[]produc$)[PT]\ 
 
*neo$ & (bruch$ | curl$ | hair$)[PT]\ 
 
(computer$ or software$ or hardware$ or peripheral$ or conductor$)[PT]\ 
 
16 and (illumination$ [TS]) and (racing | (auto$ adj rac$) | auto$ | car)[PT]"; 
 

 
//var re1 = /\([^()]*?\)\[PT\]/g; 
 
var re1 = /\((?:[^()]*?(?:\(.*\)(?!\[)))*[^()]*?\)\[PT\]/g; 
 
var re2 = /\w+(?=\$)/g; 
 

 
var matchArray = []; 
 
var m1, m2; 
 

 
while (m1 = re1.exec(str)) { 
 
    console.log(m1[0]); 
 
    while (m2 = re2.exec(m1[0])) { 
 
     matchArray.push(m2[0]); 
 
    } 
 
} 
 

 
console.log(matchArray);

+0

dies scheint für einige, aber für unten "34 und '41' [TS] und (racing | (auto $ adj rac $) | auto $ | auto) [PT]"; wird in diesem Fall null – Prithvi

+0

@Prithvi Das liegt daran, dass das Muster für re1 davon ausgeht, dass es keine verschachtelten Klammern gibt. Die erste Regex wurde so geändert, dass sie etwas mehr von den PTs erfasst. Obwohl ohne Rekursion in Standard-Javascript-Regex sehe ich jetzt nicht, wie Sie jeden möglichen Fall für verschachtelte Sachen fangen würden. – LukStorms

Verwandte Themen