C# 正则表达式匹配数组

Posted

技术标签:

【中文标题】C# 正则表达式匹配数组【英文标题】:C# Regex Match Array 【发布时间】:2016-01-15 17:18:07 【问题描述】:

所以这是我第一次使用 C#,我在使用正则表达式时遇到了一些麻烦。 所以我有一个这样的字符串:

string str = "test=CAPTURE1; test2=CAPTURE2; ......."

我正在捕获=; 之间的所有内容,所以:

var matches = Regex.Matches(str, "=([^;]*);/g");

但是,我无法从数组中获取结果:

string str2 = matches[0].Value;

我不确定我做错了什么。任何帮助表示赞赏!

编辑: 所以这就是我想要实现的(使用@Jason Evans 代码):

string connection = "Server=localhost;Database=dbTest;User Id=hello;Password=world;";            
var matches = Regex.Matches(connection, "(?<Key>[^=]*)=(?<Value>[^;]*)");

string server = matches[0].Groups["Data"].Value;
string db = matches[1].Groups["Data"].Value;
string un = matches[2].Groups["Data"].Value;
string pw = matches[3].Groups["Data"].Value;           

MsSqlConnectionParameters param = (MsSqlConnectionParameters)e.ConnectionParameters;
param.ServerName = server;
param.DatabaseName = db;
param.UserName = un;
param.Password = pw;

尽管我认为这是正确的,但由于某种原因仍然无法正常工作。

EDIT2: 奇怪的是这行得通(使用相同的数据)...我很难过:

string[] test =  "localhost", "dbTest", "hello", "world" ;

MsSqlConnectionParameters param = (MsSqlConnectionParameters)e.ConnectionParameters;

param.ServerName = test[0];
param.DatabaseName = test[1];
param.UserName = test[2];
param.Password = test[3];

【问题讨论】:

Regex.Matches() 方法隐含了全局标志。请参阅此处以使用全局标志,但它不像 JS 那样完成:msdn.microsoft.com/en-us/library/b49yw9s8%28v=vs.110%29.aspx 我试过你在你的正则表达式末尾删除/g 的例子,它按预期工作。你用它干什么? @Luiso 我已经更新了我的帖子,所以你可以看到我的实现 有关获取匹配结果的更多信息,请参阅***.com/questions/27444640/… 【参考方案1】:

尝试以下方法:

namespace ConsoleApplication1

    using System.Text.RegularExpressions;

    public class Program
    
        static void Main(string[] args)
        
            string str = "test=CAPTURE1; test2=CAPTURE2";

            var matches = Regex.Matches(str, "(?<Key>[^=]*)=(?<Value>[^;]*)");

            string str2 = matches[0].Groups["Key"].Value;
            string str3 = matches[0].Groups["Value"].Value;
        
    

我使用命名捕获组(?&lt;Key&gt;)(?&lt;Data&gt;) 来捕获'=' 前后的文本。这样你就可以抓住字符串的各个部分。

【讨论】:

是的,我认为这是正确的 - 但我仍然在将值传递给我需要的值时遇到问题。我已经更新了我的帖子以包含我的实现。

以上是关于C# 正则表达式匹配数组的主要内容,如果未能解决你的问题,请参考以下文章

c# 正则表达式 匹配

C#正则表达式怎样提取匹配到的数据???

c#使用正则表达式匹配数据 并计算填入新的值

C#匹配中文字符串的4种正则表达式分享

使用 C# 的正则表达式匹配(简单??)正则表达式

C# 正则表达式匹配总是返回 false