2009-08-17 4 views
2

Можно ли вернуть строку между двумя строками, используя регулярное выражение? Например, если у меня есть эта строка:Regex возвращает значение между двумя значениями?

string = "this is ::: test ??? string";

Могу ли я написать функцию, чтобы вернуть слово «тест» с помощью регулярного выражения?

Edit: К сожалению, я использую C#

+1

Какой пожалуйста языка сайта? :-) –

+1

Да. Если вам нужен пример, вы бы хорошо заявили о реализации ... –

ответ

7

Поскольку вы не говоря уже о языке, некоторые C#:?

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

(точное регулярное выражение Паттен будет зависеть от того, что вы считаете матч ... одно слово ничего и т.д. ..)

0

Да, в своем регулярном выражении вы можете поставить перед/после «контекста» окружающих, что вы хотите, чтобы соответствовать, а затем использовать захват группы, чтобы возвратить деталь вы» . заинтересованы в

0

if ::: и ??? Ваши разделители можно использовать регулярные выражения, как:

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

И часть в середине будет возвращена в захваченном группе от матча.

2

Поскольку вы забыли указать язык, я отвечу в Scala:

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

Пример:

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

Ну, слишком поздно для информации C#. Кстати, \ Q и \ E не будут работать на .Net-языках, согласно моей ссылке, поэтому преобразование этого, вероятно, не сработает. –

+0

\ Q и \ E не работают в C#, но вы можете использовать функцию Regex.Escape: Regex.Escape (p1) + "(. *?)" + Regex.Escape (p2) – Jirka

Смежные вопросы