简体   繁体   English

使用C#正则表达式获取两个单词之间的字符串

[英]Get string between two words using C# regex

I want to get text between two strings. 我想在两个字符串之间获取文本。 For this, I have tried the below code. 为此,我尝试了以下代码。

string q = "SELECT \"NORTHWIND\".\"CUSTOMER_DETAILS_NORTHWIND\".\"CUSTOMER_ID\" FROM \"NORTHWIND\".\"CUSTOMER_DETAILS_NORTHWIND\"";
        Regex regex = new Regex("SELECT(.*)FROM");
var result = regex.Match(q).Value;

Output : SELECT \\"NORTHWIND\\".\\"CUSTOMER_DETAILS_NORTHWIND\\".\\"CUSTOMER_ID\\" FROM 输出 :SELECT \\“ NORTHWIND \\”。\\“ CUSTOMER_DETAILS_NORTHWIND \\”。\\“ CUSTOMER_ID \\” FROM

But I expected result without SELECT and FROM keyword. 但是我期望没有SELECT和FROM关键字的结果。

Expected Output: \\"NORTHWIND\\".\\"CUSTOMER_DETAILS_NORTHWIND\\".\\"CUSTOMER_ID\\" 预期输出: \\“ NORTHWIND \\”。\\“ CUSTOMER_DETAILS_NORTHWIND \\”。\\“ CUSTOMER_ID \\”

Can anyone suggest me how to achieve this? 谁能建议我如何实现这一目标?

string input = "SELECT \"NORTHWIND\".\"CUSTOMER_DETAILS_NORTHWIND\".\"CUSTOMER_ID\" FROM \"NORTHWIND\".\"CUSTOMER_DETAILS_NORTHWIND\"";

Regex regex = new Regex("SELECT(.*)FROM");
var result = regex.Match(input);
var output = result.Groups[1].ToString();
var match = Regex.Match(s, @"(?i)SELECT\s+(.+?)\s+FROM");
if (match.Success)  {
    Console.WriteLine(match.Groups[1].Value);
}

You can do it without RegEx too. 您也可以不使用RegEx

public static string GetBetweenTwoWords(string firstWord,string secondWord,string str){
    var firstWordIndex = str.IndexOf(firstWord) + firstWord.Length;
    var secondWordIndex = str.IndexOf(secondWord);
    return str.Substring(firstWordIndex,secondWordIndex - firstWordIndex);
}

Test: 测试:

static void Main(string[] args)
{
    string q = "SELECT \"NORTHWIND\".\"CUSTOMER_DETAILS_NORTHWIND\".\"CUSTOMER_ID\" FROM \"NORTHWIND\".\"CUSTOMER_DETAILS_NORTHWIND\"";
    Console.WriteLine(GetBetweenTwoWords("SELECT","FROM",q));

}

Output: 输出:

"NORTHWIND"."CUSTOMER_DETAILS_NORTHWIND"."CUSTOMER_ID"

Here you go: 干得好:

  "SELECT\s+\K\\".*(?=\sFROM)

no need for capture groups, just take the regex match (you can also remove the "SELECT\\s+ (it's just an extra verification) 无需捕获组,只需进行正则表达式匹配即可(您也可以删除“ SELECT \\ s +”(这只是额外的验证)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM