查找相同字母组成的单词,排除相同的单词

//查找相同字母组成的单词,排除相同的单词

        string source = "opt,max,tpo,hi,tpo,hide,ih,pot";
        string[] array1 = source.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
        List<string> vResults = new List<string>();
        foreach (string item in array1)
        {
            char[] chars = item.ToUpper().ToCharArray();
            Array.Sort(chars);
            string T = new string(chars);
            bool exists = false;
            for (int i = 0; i < vResults.Count; i++)
            {
                if (T + "=" == vResults[i].Substring(0, T.Length + 1))
                {
                    vResults[i] += "," + item;
                    exists = true;
                    break;
                }
            }
            if (!exists) vResults.Add(T + "=" + item);
        }
        foreach (string vResult in vResults)
        {
            if (vResult.IndexOf(',') > 0)
            {
                var same = string.Format(vResult.Substring(vResult.IndexOf('=') + 1));
                string[] array2 = same.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                string[] array3= array2.Distinct().ToArray();//排除相同单词
                Console.WriteLine(string.Join(",",array3));
            }
            else
            {
                Console.WriteLine(string.Format(vResult.Substring(vResult.IndexOf('=') + 1)));
            }
        }
        Console.Read();
<think>嗯,用户想知道在GVim中如何查找除了'awreg'之外的其他单词。首先,我需要回忆一下GVim的正则表达式功能,因为排除特定模式通常需要用到正则表达式。 用户可能已经知道基本的查找命令,比如使用/来搜索,但排除某个单词可能需要更复杂的模式。在正则表达式中,可以使用负向先行断言来排除特定字符串。例如,使用\v来启用very magic模式,然后构造一个不包含'awreg'的模式。 记得Vim的正则语法和其他环境有所不同,所以需要确保语法正确。比如,负向先行断言的写法是(?!pattern)。所以组合起来,模式应该是\v\<(?!awreg\>)\w+\>。这里\<和\>用来匹配单词边界,\w+匹配整个单词,而(?!awreg)确保排除单词。 另外,用户可能需要知道如何操作,比如输入/然后粘贴这个正则表达式,然后用n和N来导航。还要提醒他们可能需要启用哪些选项,比如忽略大小写的话可以加\c,或者是否需要全局替换时的注意事项。 还需要检查是否有相关的引用内容可以支持这个回答。比如引用[2]提到的Shift + *和yw拷贝单词的方法,但这里的情况是排除,所以可能需要不同的方法。引用[3]提到的替换操作中的flags,但用户的问题是关于查找,所以可能不直接相关。不过可以确认是否有其他技巧。 最后,确保步骤清晰,用户能够一步步跟随操作,并且解释每个部分的作用,比如单词边界的重要性,以及负向断言的工作原理。可能还需要给出示例,让用户更容易理解。</think>### 在GVim中排除'awreg'单词查找方法 在GVim中,若需要查找除特定单词(如`awreg`)之外的其他单词,可通过**正则表达式结合负向先行断言**实现。具体步骤如下: 1. **启用正则表达式高级模式** 在命令模式下输入`/\v`(启用"very magic"模式,简化正则语法),接着输入: ``` \<(?!awreg\>)\w+\> ``` 完整命令为: ``` /\v\<(?!awreg\>)\w+\> ``` 2. **关键语法解析** - `\<` 和 `\>` 表示匹配单词边界,确保精确匹配整个单词 - `(?!awreg)` 是负向先行断言,排除包含`awreg`的匹配项 - `\w+` 匹配任意字母、数字和下划线组成单词 3. **执行与导航** - 按`Enter`开始查找,用`n`跳转到下一个匹配项,`Shift+N`返回上一个匹配项 - 若需高亮显示,可先执行`:set hlsearch`[^2] ### 扩展应用 若需要排除多个单词(如`awreg|test|demo`),可扩展表达式: ``` /\v\<(?!awreg|test|demo\>)\w+\> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值