用于标记化连接字符串的正则表达式
Regular expression for tokenizing connection string
我有 2 种不同类型的连接字符串(由于遗留原因,由于各种原因我无法在所有地方修复,这些原因与此处无关)。我需要将它们分成 key/value 对。以下是示例连接字符串:
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,]+)
如何将其变成适用于所有情况的正则表达式?
您可以使用下面的正则表达式
(?<Key>[^=;]+)=(?<Val>[^;]+)
上面使用的是否定符class。 [^;]+
会 select 遇到第一个 ;
之前的所有内容。
DEMO(我已经删除了命名组进行测试。但是它在 C# 中运行良好)
这是我的建议。
(?<key>[^=;,]+)=(?<val>[^;,]+(,\d+)?)
分号和逗号一样是分隔符,如果它后面没有紧跟数字的话。
我有 2 种不同类型的连接字符串(由于遗留原因,由于各种原因我无法在所有地方修复,这些原因与此处无关)。我需要将它们分成 key/value 对。以下是示例连接字符串:
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,]+)
如何将其变成适用于所有情况的正则表达式?
您可以使用下面的正则表达式
(?<Key>[^=;]+)=(?<Val>[^;]+)
上面使用的是否定符class。 [^;]+
会 select 遇到第一个 ;
之前的所有内容。
DEMO(我已经删除了命名组进行测试。但是它在 C# 中运行良好)
这是我的建议。
(?<key>[^=;,]+)=(?<val>[^;,]+(,\d+)?)
分号和逗号一样是分隔符,如果它后面没有紧跟数字的话。