Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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_Regex - Fatal编程技术网

C# 用于标记连接字符串的正则表达式

C# 用于标记连接字符串的正则表达式,c#,.net,regex,C#,.net,Regex,我有两种不同类型的连接字符串(因为遗留的原因,我不能到处修复,因为这里没有相关的原因)。我需要将它们分成键/值对。以下是示例连接字符串: 1. Server=SomeServer;Database=SomeDatabase;Something=Hello 2. Server=SomeServer,Database=SomeDatabase;Something=Hello 3. Server=SomeServer,1111;Database=SomeDatabase;Something=Hello

我有两种不同类型的连接字符串(因为遗留的原因,我不能到处修复,因为这里没有相关的原因)。我需要将它们分成键/值对。以下是示例连接字符串:

1. Server=SomeServer;Database=SomeDatabase;Something=Hello
2. Server=SomeServer,Database=SomeDatabase;Something=Hello
3. Server=SomeServer,1111;Database=SomeDatabase;Something=Hello 
对于前两种情况,我可以使用正则表达式:

(?<Key>[0-9A-z\s]+)=(?<Val>[0-9A-z\s,]+?[0-9A-z\s]+)
(?<Key>[0-9A-z\s]+)=(?<Val>[0-9A-z\s]+?[0-9A-z\s,]+)
(?[0-9A-z\s]+)=(?[0-9A-z\s,]+?[0-9A-z\s]+)
对于第三个,我可以使用正则表达式:

(?<Key>[0-9A-z\s]+)=(?<Val>[0-9A-z\s,]+?[0-9A-z\s]+)
(?<Key>[0-9A-z\s]+)=(?<Val>[0-9A-z\s]+?[0-9A-z\s,]+)
(?[0-9A-z\s]+)=(?[0-9A-z\s]+?[0-9A-z\s,]+)

如何将其转换为一个适用于所有情况的正则表达式?

您可以使用下面的正则表达式

(?<Key>[^=;]+)=(?<Val>[^;]+)
(?[^=;]+)=(?[^;]+)
上面使用的是否定字符类<代码>[^;]+将选择所有内容,直到第一个
它遇到的


(我已经删除了用于测试的命名组。但是在C#中它会很好地工作)

您可以使用下面的正则表达式

(?<Key>[^=;]+)=(?<Val>[^;]+)
(?[^=;]+)=(?[^;]+)
上面使用的是否定字符类<代码>[^;]+
将选择所有内容,直到第一个
它遇到的

(我已经删除了用于测试的命名组。但是在C#中它会很好地工作)

下面是我的建议

(?<key>[^=;,]+)=(?<val>[^;,]+(,\d+)?)
(?[^=;,]+)=(?[^;,]+(,\d+))
分号是一个分隔符,如果后面不紧跟数字,则逗号也是一个分隔符。

以下是我的建议

(?<key>[^=;,]+)=(?<val>[^;,]+(,\d+)?)
(?[^=;,]+)=(?[^;,]+(,\d+))

分号是一个分隔符,如果后面不紧跟数字,则逗号也是分隔符。

分号的作用是什么?[0-9A-z\s,]+?[0-9A-z\s]+
?是的。也许会有用?@Rawing:第一部分做了一个惰性匹配,捕获了“=”后面的第一个字母-然后我尝试用贪婪的匹配捕获其余的字母。
[0-9A-z\s,]+?[0-9A-z\s]+
的目的是什么?是的。也许有用吗?@Rawing:第一部分做了一个懒散的匹配,捕捉到了“=”后面的第一个字母-然后我试着用一个贪婪的匹配来捕捉其余的字母。@Denis你为什么要这样使用它?我的意思是没有统一性,这是遗传的。你说得对,它是sux,只是没有任何控制权……你会如何在c中使用它来循环比赛?@Denis你为什么要这样使用它?我的意思是没有统一性,这是遗传的。你是对的,它是sux,只是没有任何控制权…你会如何在c#中使用它来循环比赛?