从字符串中获取特定单词
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 名称中没有括号。
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;
我有 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 名称中没有括号。
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;