使用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,我需要添加什么到正则表达式?
您只对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=
小提琴演示