2009-08-17 11 views
2

Est-il possible de retourner une chaîne entre 2 chaînes, en utilisant regex? Par exemple, si j'ai cette chaîne:Valeur de retour Regex entre deux valeurs?

string = "ceci est un ::: test ??? string"; Est-ce que je peux écrire une fonction pour retourner le mot "test" en utilisant une regex?

Edit: Désolé, je suis en utilisant C#

+1

Ce qui s'il vous plaît langage? :-) –

+1

Oui. Si vous voulez un exemple, vous feriez bien d'indiquer une implémentation ... –

Répondre

7

Puisque vous ne mentionnez pas une langue, une C#:?

string input = "this is a :::test??? string"; 
    Match match = Regex.Match(input, @":::(\w*)\?\?\?"); 
    if (match.Success) 
    { 
     Console.WriteLine(match.Groups[1].Value); 
    } 

(l'exacte patten regex dépend de ce que vous considérez comme un match ... un mot rien, etc. ..)

0

Oui, dans votre regex vous pouvez fournir avant/après « contexte » entourant ce que vous voulez faire correspondre, puis utilisez un groupe de capture pour retourner l'élément » . êtes intéressé par

0

si ::: et ??? sont vos délimiteurs vous pouvez utiliser une expression régulière comme:

:::(.*)\?\?\? 

et la partie au milieu sera de retour que le groupe capturé à partir du match.

2

Puisque vous avez oublié d'indiquer une langue, je vais répondre à Scala:

def findBetween(s: String, p1: String, p2: String) = (
    ("\\Q"+p1+"\\E(.*?)\\Q"+p2+"\\E").r 
    findFirstMatchIn s 
    map (_ group 1) 
    getOrElse "" 
) 

Exemple:

scala> val string = "this is a :::test??? string"; 
string: java.lang.String = this is a :::test??? string 

scala>  def findBetween(s: String, p1: String, p2: String) = 
    |  ("\\Q"+p1+"\\E(.*?)\\Q"+p2+"\\E").r findFirstMatchIn s map (_ group 1) getOrElse "" 
findBetween: (s: String,p1: String,p2: String)String 

scala> findBetween(string, ":::", "???") 
res1: String = test 
+0

Eh bien, trop tard pour l'information C#. D'ailleurs, \ Q et \ E ne fonctionneront pas pour les langages .Net, d'après ma référence, donc la conversion ne fonctionnera probablement pas. –

+0

\ Q et \ E ne fonctionnent pas dans C#, mais vous pouvez utiliser la fonction Regex.Escape: Regex.Escape (p1) + "(. *?)" + Regex.Escape (p2) – Jirka

Questions connexes