用于在另一个内查找字符串部分的正则表达式

Sai*_*udo 3 c# regex

我有两个字符串:第一个值是"catdog",第二个值是"got".

我正试图找一个正则表达式告诉我"得到"的字母是否在"catdog"中.我特别希望避免出现重复字母的情况.例如,我知道"得到"是匹配,但"gott"不匹配,因为"catdog"中没有两个"t".

编辑:

根据Adam在下面的回答,这是我在我的解决方案中工作的C#代码.感谢所有回复的人.

注意:我必须将char转换为int并减去97以获得数组的适当索引.在我的情况下,字母总是小写.

    private bool CompareParts(string a, string b)
    {

        int[] count1 = new int[26];
        int[] count2 = new int[26];

        foreach (var item in a.ToCharArray())
            count1[(int)item - 97]++;

        foreach (var item in b.ToCharArray())
            count2[(int)item - 97]++;

        for (int i = 0; i < count1.Length; i++)
            if(count2[i] > count1[i])
                return false;

        return true;
    }
Run Code Online (Sandbox Code Playgroud)

Ada*_*eld 7

你正在使用错误的工具来完成工作.这不是正则表达式能够轻松处理的东西.幸运的是,没有正则表达式,这样做相对容易.您只需计算两个字符串中每个字母的出现次数,并比较两个字符串之间的计数 - 如果对于字母表中的每个字母,第一个字符串中的计数至少与第二个字符串中的计数一样大,那么你的标准就满足了.由于您没有指定语言,因此这里的伪代码答案应该可以轻松翻译成您的语言:

bool containsParts(string1, string2)
{
    count1 = array of 26 0's
    count2 = array of 26 0's

    // Note: be sure to check for an ignore non-alphabetic characters,
    // and do case conversion if you want to do it case-insensitively
    for each character c in string1:
        count1[c]++
    for each character c in string2:
        count2[c]++

    for each character c in 'a'...'z':
        if count1[c] < count2[c]:
            return false

    return true
}
Run Code Online (Sandbox Code Playgroud)