使用Regex匹配包含特殊字符的28字符ID字符串

本文关键字:28字符 ID 字符串 特殊字符 包含 Regex 使用 | 更新日期: 2023-09-27 18:05:53

我有一个小应用程序,读取一些日志文件由另一个应用程序。在这些文件中,正在处理类似于下面的行:

 ban added reason='Posting links to malware websites' cluid='oNNtrNGo6kdxNRshT8MiHlq4wR8=' bantime=0 by client 'Someone'(id:4)

目前,我有一点Regex 'w{27}=,将获得该字符串中的cluid值。字符串长度总是27个字符,末尾有一个'='。然而,有一些ID本身具有特殊字符,例如:IVz0tUZThCdbBnCWjf+axoMqVTM=(注意'+'字符),这意味着我的正则表达式不匹配这个ID。

为了使它匹配两个ID,我需要添加什么到正则表达式?

使用Regex匹配包含特殊字符的28字符ID字符串

您只对cluid的值(在单引号之间)感兴趣。你可以试试这个模式:

"cluid='([^']{27}=)'"

它捕获27个不是单引号的字符(假设单引号不能是值的一部分),后面跟着等号进入捕获组1。

的例子:

using System;
using System.Text.RegularExpressions;
public class Program
{
    public static void Main()
    {
        string line1 = "ban added reason='Posting links to malware websites' cluid='oNNtrNGo6kdxNRshT8MiHlq4wR8=' bantime=0 by client 'Someone'(id:4)";
        Match m = Regex.Match(line1, "cluid='([^']{27}=)'");
        if (m.Success)
        {
            Console.WriteLine(m.Groups[1]);
        }
        string line2 = "ban added reason='Posting links to malware websites' cluid='IVz0tUZThCdbBnCWjf+axoMqVTM=' bantime=0 by client 'Someone'(id:4)";
        m = Regex.Match(line2, "cluid='([^']{27}=)'");
        if (m.Success)
        {
            Console.WriteLine(m.Groups[1]);
        }
    }
}

结果:

oNNtrNGo6kdxNRshT8MiHlq4wR8=
IVz0tUZThCdbBnCWjf+axoMqVTM=

小提琴演示