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#中使用它来循环比赛?