Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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#_Asp.net_Regex - Fatal编程技术网

C# 计算一行中出现的多组字符串

C# 计算一行中出现的多组字符串,c#,asp.net,regex,C#,Asp.net,Regex,这是一行代码,它试图在文本文件中使用正则表达式在一行中找到匹配的字符串 MatchCollection collection = Regex.Matches(readedLine, @"/funcdesc=cls/ && /jobcat=VSO/"); countedChars = collection.Count; 这是文本文件内容示例 2016-01-01 d;D;;D;funcdesc=cls&workcode=file&jobcat=VSO&j

这是一行代码,它试图在文本文件中使用正则表达式在一行中找到匹配的字符串

 MatchCollection collection = Regex.Matches(readedLine, @"/funcdesc=cls/ && /jobcat=VSO/");
countedChars = collection.Count;
这是文本文件内容示例

2016-01-01 d;D;;D;funcdesc=cls&workcode=file&jobcat=VSO&jobcat=DSO;

2016-01-02 d;D;;D;funcdesc=cls&workcode=file&jobcat=DSO&jobcat=DSO;
预期总计数输出应1


(因为第1行满足同时存在“funcdesc=cls”和“jobcat=VSO”的要求,但是第2行没有满足,因为没有找到“jobcat=VSO”,只有第一个字符串。

正确的模式应该是
funcdesc=cls.*jobcat=VSO

另外,regex中的
$
表示行尾。

由于“funcdesc=cls”和“jobcat=VSO”的顺序是不固定的(即,“funcdesc”可以位于“jobcat”之后),您可以使用下面的regex来捕获这两种情况下的匹配项。可能有更有效的方法来实现这一点,这是我想不起来的:

/funcdesc=cls.+jobcat=VSO|jobcat=VSO.+funcdesc=cls/
|
是在正则表达式中表示“或”的一种方式,即“funcdesc=cls”后跟一个或多个(
+
)字符,后跟“jobcat=VSO”,或“jobcat=VSO”后跟一个或多个字符,后跟“funcdesc=cls”

这将符合以下条件:

2016-01-01 d;D;;D;funcdesc=cls&workcode=file&jobcat=VSO&jobcat=DSO;

但不会匹配


&
在正则表达式中有效吗?我以前从未见过这一点……在一个stackoverflow答案中,我也尝试了“(fundesc=cls)(jobcat=VSO)”它们会按那个顺序排列吗?如果会,你可以使用
fundesc=cls.+jobcat=VSO
,如果你一次只读一行。顺便说一句,记住“read”的过去分词是“read”,而不是“readed”。还请记住,
/
仅用于识别Javascript中的正则表达式,它们不是正则表达式本身的一部分。在我的脑海中,类似的东西可能会起作用:
/funcdesc=cls.+jobcat=VSO
可能会起作用。
+
会显示一个或多个字符。不过,我还没有尝试过这种方法,因为有很多正则表达式有x个测试站点,你可以使用它们来处理正则表达式。他的意思是funcdesc总是在jobcat之前出现。如果不是这样,那么正则表达式需要更改。
2016-01-01 d;D;;D;jobcat=VSO&workcode=file&funcdesc=cls&jobcat=DSO;
2016-01-02 d;D;;D;funcdesc=cls&workcode=file&jobcat=DSO&jobcat=DSO;