从字符串中获取特定单词

Get specific word from string

我有 Table URL,我只想要 select Table Name。实现它的最佳方法是什么?

URLs:

"db://SQL Table.Table.[dbo].[DirectoryType]" 
"db://SQL Table.Table.[dbo].[IX_AnalysisResult_ConceptVariations]" 
"db://SQL Table.Table.[dbo].[IX_AnalysisResult_DocXConcepts]" 

期望的输出:

DirectoryType
IX_AnalysisResult_ConceptVariations
IX_AnalysisResult_DocXConcepts

注意:这些 URL 大部分时间都有 db://SQL Table.Table.[dbo]. 的共同点,因此我使用以下代码来实现此目的:

代码:

var trimURL = tableURL.Replace("db://SQL Table.Table.[dbo].", String.Empty).Replace("[",String.Empty).Replace("]",String.Empty);

输出:

DirectoryType
IX_AnalysisResult_ConceptVariations
IX_AnalysisResult_DocXConcepts

如果由于某种原因 URL 前缀被更改,那么我的代码将无法工作。那么从这些类型的 URL 中获取 table 名称的最佳方法是什么?

您可以获取“[”和“]”的最后一个索引并获取其中的子字符串:

var startIndex = tableUrl.LastIndexOf('[') + 1; // +1 to start after opening bracket
var endIndex = tableUrl.LastIndexOf(']');
var charsToRead = (startIndex - endIndex) - 1; // -1 to stop before closing bracket

var tableName = tableUrl.Substring( startIndex, charsToRead );

当然,这是假设您可以保证 table 名称中没有括号。

参考文献:
String.Substring
String.LastIndexOf

var matcher = new System.Text.RegularExpressions.Regex(@"^.*\[(?<table>.*?)\]""$", RegexOptions.Compiled);
var results = matcher.Match(/*your input string*/);

检查调试器中的结果,您将了解如何提取您要查找的内容。

请注意,此模式假定您的数据实际上包含问题中显示的引号。

你做得对,我只是在 '.' 上使用了 split,我假设你的 url 包含最小 anything.[DirectoryType]"

string op = tableURL.Split('.')[tableURL.Split('.').Length - 1].Replace("[", "").Replace("]", "");

您可以使用此正则表达式来匹配 [] 的最后一组中紧接出现在字符串末尾的最后一个内容:

\[([^\[^\]]*)\]$

在输入 db://SQL Table.Table.[dbo].[DirectoryType] 处获取字符串 DirectoryType.

$ 符号表示字符串结束。

您可以看到它的实际效果 here

一个例子:

var match = new System.Text.RegularExpressions.Regex(@"\[([^\[^\]]*)\]$", RegexOptions.Singleline);
Match match_result = match.Match("db://SQL Table.Table.[dbo].[DirectoryType]");
string result = "";
if (match_result.Groups.Count > 1)
    result = match_result.Groups[1].Value;
    //result = "DirectoryType"

记得using System.Text.RegularExpressions;