正则表达式返回两个值之间的值?

时间:2009-08-17 21:24:38

标签: c# regex string

是否可以使用正则表达式在两个字符串之间返回一个字符串?例如,如果我有这个字符串:

string =“这是一个::: test ??? string”;

我可以编写一个函数来使用正则表达式返回单词“test”吗?

编辑:对不起,我正在使用C#

4 个答案:

答案 0 :(得分:7)

由于你没有提到一种语言,一些C#:

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

(确切的正则表达式取决于你认为匹配...一个词?什么?等等......)

答案 1 :(得分: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

答案 2 :(得分:0)

是的,在您的正则表达式中,您可以提供围绕您想要匹配的前/后“上下文”,然后使用捕获组返回您感兴趣的项目。

答案 3 :(得分:0)

如果:::和???是你的分隔符你可以使用正则表达式:

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

中间的部分将作为匹配中的捕获组返回。