Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串匹配_C#_.net_Winforms_String - Fatal编程技术网

C# 字符串匹配

C# 字符串匹配,c#,.net,winforms,string,C#,.net,Winforms,String,我有一根绳子 String mainString="///BUY/SELL///ORDERTIME///RT///QTY///BROKERAGE///NETRATE///AMOUNTRS///RATE///SCNM///"; 现在我有另一根弦了 String str1= "RT"; 它应该只与RT匹配,后者是字符串mainString的子字符串,而不与ORDERTIME匹配,后者也是字符串mainString的子字符串 String str2= "RATE" ; 而RATE(str2)应

我有一根绳子

String mainString="///BUY/SELL///ORDERTIME///RT///QTY///BROKERAGE///NETRATE///AMOUNTRS///RATE///SCNM///";
现在我有另一根弦了

String str1= "RT";
它应该只与
RT
匹配,后者是字符串
mainString
的子字符串,而不与
ORDERTIME
匹配,后者也是字符串
mainString
的子字符串

 String str2= "RATE" ;
RATE
(str2)应该与
RATE
匹配,后者是字符串
mainString
的子字符串,但不能与
NETRATE
匹配,后者也是字符串
mainString
的子字符串

 String str2= "RATE" ;

我们怎么做呢?

匹配
“///RT///”
“///RATE///”

据我所知,您想匹配
//
之间的字符串作为分隔符。
如果你想找
str
你只需要做

Regex.Match(mainString,(^ |//)“+str+”(///|$)”

这可能会给你一些线索——没有接近真实代码质量的地方,只有5分钟的工作时间来提供这个劣质的解决方案,但却能满足你的需要。它闻起来很难闻,需要警告

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;

namespace test {
    class Program {
        static void Main(string[] args) {
            String mainString="//BUY/SELL//ORDERTIME//RT//QTY//BROKERAGE//NETRATE//AMOUNTRS//RATE//SCNM//";


            Hashtable ht = createHashTable(mainString);



            if (hasValue("RA", ht)) {
                Console.WriteLine("Matched RA");
            } else {
                Console.WriteLine("Didnt Find RA");
            }


            if (hasValue("RATE", ht)) {
                Console.WriteLine("Matched RATE");
            }


            Console.Read();

        }


        public static Hashtable createHashTable(string strToSplit) {
            Hashtable ht = new Hashtable();
            int iCount = 0;

            string[] words = strToSplit.Split(new Char[] { '/', '/', '/' });
            foreach (string word in words) {

                ht.Add(iCount++, word);
            }

            return ht;
        }
        public static bool hasValue(string strValuetoSearch, Hashtable ht) {

            return ht.ContainsValue(strValuetoSearch);

        }

    }

}

我不知道它是否每次都能工作,但我已经尝试过了,它现在在这个字符串匹配中工作。我想知道这是否可以,请给我建议

str1 = str1.Insert(0, "///");
str1=str1.Insert(str1.Length,"///");

bool Result = mainString.Contains(str1);

林克反对怎么样

String mainString="///BUY/SELL///ORDERTIME///RT///QTY///BROKERAGE///NETRATE///AMOUNTRS///RATE///SCNM///";
String searchTerm = "RT";
String[] src = mainString.split('///');
var match = from word in src where 
            word.ToLowerInvariant() == searchTerm.ToLowerInvariant() 
            select word;

我附近没有VS,所以我无法测试它,但它应该类似于此。

为什么它应该匹配RT而不是ORDERTIME?为什么它应该匹配速率而不是净速率?你说的“匹配”是什么意思;你只想检查字符串是否存在吗?@Jon Skeet,先生,因为我想知道字符串中的哪个位置进行了精确匹配?@Fredrik Mork,我想知道主字符串中哪个子字符串进行了精确匹配。但你还没有解释你试图匹配的规则。您已经给出了示例,但没有给出它们应该作为示例的规则。您可以使用string.IndexOf查找子字符串匹配的位置,但除非您能够澄清您试图执行的操作,否则这不会有多大帮助。string.Split(char[])对这些字符中的任何一个进行拆分-它不会将其视为一个字符序列。它会从字符串中获取一个包含足够“查找”的单个项的工作哈希表价值观