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

时间:2015-01-08 14:50:35

标签: 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 

对于前两种情况,我可以使用正则表达式:

(?<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,]+)

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

2 个答案:

答案 0 :(得分:2)

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

(?<Key>[^=;]+)=(?<Val>[^;]+)

以上使用的是否定字符类。 [^;]+会在遇到第一个;之前选择所有内容。

DEMO(我已删除了已命名的群组以进行测试。但是,它会在C#中运行良好)

答案 1 :(得分:1)

这是我的建议。

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

如果分号后面没有数字,分号就是逗号分隔符。