我有2个字符串,我需要同时匹配两个字符串。 它有点棘手,因为字符串的最后一部分应与另一个字符串的第一部分匹配。
我尝试使用string.Contains()方法,但未成功,因为两个字符串中都可以有n个子文件夹
示例:
var string1 = @"C:/GII/gii_db/DownTime/EMEA";
var string2 = @"DownTime/EMEA/APPS_GLOBAL/Tables/XXG_CHUB_ADDRESS_T.SQL";
这两个字符串中的部分 DownTime / EMEA 应该匹配。
答案 0 :(得分:3)
从我的POV中,您可以使用string.Contains
。
您可以询问Downtime/EMEA
是否在两个字符串中。
如果我错了,请看下面的代码。
var string1 = @"C:/GII/gii_db/DownTime/EMEA";
var string2 = @"DownTime/EMEA/APPS_GLOBAL/Tables/XXG_CHUB_ADDRESS_T.SQL";
if (!string1.Contains("/DownTime/EMEA") && string2.Contains("/DownTime/EMEA"))
{
Console.WriteLine("Not Matched");
}
else
{
Console.WriteLine("Matched");
}
Console.ReadKey();
答案 1 :(得分:2)
这对我有用:
var string1 = @"C:/GII/gii_db/DownTime/EMEA";
var string2 = @"DownTime/EMEA/APPS_GLOBAL/Tables/XXG_CHUB_ADDRESS_T.SQL";
bool is_match =
Enumerable
.Range(1, (string1.Length < string2.Length ? string1.Length : string2.Length) - 1)
.Any(x => string1.Substring(string1.Length - x) == string2.Substring(0, x));
在此示例中, is_match
是true
。
一种稍微简单但效率较低的解决方案:
bool is_match =
Enumerable
.Range(1, string1.Length)
.Any(x => string2.StartsWith(string1.Substring(string1.Length - x)));
答案 2 :(得分:0)
我现在无法提供代码,但可以通过以下一种可能的解决方案:
string1
是否包含string2
的第一个令牌。跟踪位置。string1
,检查下一个令牌是否等于string2
的第二个令牌答案 3 :(得分:0)
简单:
{
string string1 = "C:/GII/gii_db/DownTime/EMEA";
string string2 = "DownTime/EMEA/APPS_GLOBAL/Tables/XXG_CHUB_ADDRESS_T.SQL";
string[] splitStr1 = string1.Split(new char[] { '/' });
string[] splitStr2 = string2.Split(new char[] { '/' });
if ((splitStr1[splitStr1.Length - 2] == splitStr2[0]) && (splitStr1[splitStr1.Length - 1] == splitStr2[1]))
{
Console.WriteLine("Matched");
}
答案 4 :(得分:0)
public static class StringExtensions
{
public static bool EndIsTheBegginingOf(this string s1, string s2)
{
for (int i = s1.Length - 1; i >= 0; i--)
{
var part = s1.Substring(i);
if (s2.StartsWith(part)) return true;
}
return false;
}
}
用法:
var s1 = @"C:/GII/gii_db/DownTime/EMEA";
var s2 = @"DownTime/EMEA/APPS_GLOBAL/Tables/XXG_CHUB_ADDRESS_T.SQL";
var res = s1.EndIsTheBegginingOf(s2); // true
s2 = @"DownT/ime/EMEA/APPS_GLOBAL/Tables/XXG_CHUB_ADDRESS_T.SQL";
res = s1.EndIsTheBegginingOf(s2); // false
答案 5 :(得分:0)
//find a string which is end with string1 and start with string2
static void Main(string[] args)
{
var string1 = @"C:/GII/gii_db/DownTime/EMEA";
var string2 = @"DownTime/EMEA/APPS_GLOBAL/Tables/XXG_CHUB_ADDRESS_T.SQL";
string result = "";
int length = string1.Length;
int index = 1;
for (int i = 0; i < length; i++)
{
string temp = string1.Substring(length - i - 1, index++);
if (string2.StartsWith(temp))
{
result = temp;
}
Console.WriteLine(temp);
}
Console.WriteLine($"result:{result}");
ReadLine();
}
答案 6 :(得分:0)
您可以编写一些代码,将两个序列分为“ xxxxxx / xxxxxx”形式的双字母组,其中xxxxx是字母和下划线的序列。然后,您可以比较为每个字符串找到的匹配项。以下正则表达式代码与两个字符串中的都匹配。然后只需比较从所有字符串中找到的所有匹配项即可。
(DownTime/EMEA)*/*(EMEA/APPS_GLOBAL)*/*(APPS_GLOBAL/Tables)*/*(Tables/XXG_CHUB_ADDRESS_T\.SQL)*/*
假设您已首先将字符串拆分成上述格式,那么您应该一切顺利。