正则表达式匹配

本文关键字:正则表达式 | 更新日期: 2023-09-27 17:56:50

我正在尝试在文档中搜索匹配的字符串(占位符),并且正在努力使正则表达式正确。

我试图查找的字符串将采用这种格式,可以在文档的任何地方找到

##MYPH[j@_-jdf]##

我尝试使用的正则表达式是:

##MYPH'[([-!$%@^&*()_+|~=`{}:";'<>?,.'/]+('w)+('W)+)']##

##MYPH[]##将始终相同,但方括号之间的文本可以是任何内容。最终,我只需要返回方括号中的内容。

我一直在测试这个,但我没有得到匹配。

我已经将+换成了*,然后我得到了一场比赛,但括号中不必有任何内容。我也尝试完全删除*+,但仍然不匹配。

谁能告诉我我做错了什么?

正则表达式匹配

您可以使用

##MYPH'[(.*?)]##

请参阅正则表达式演示。此正则表达式适用于短字符串。对于较长的,请使用其展开的等效##MYPH'[([^]]*(?:](?!##)[^]]*)*)]##(请参阅此演示)。

模式说明

  • ##MYPH'[ - 字面##MYPH[
  • (.*?) - (捕获组 1)任何 0+ 字符,但换行符(添加RegexOptions.Singleline标志以匹配换行符)直到第一个
  • ]## - 文本字符串]##

C# 演示:

var line = "##MYPH[j@_-jdf]##";
var pattern = @"##MYPH'[(.*?)]##";
var m = Regex.Match(line, pattern);
if (m.Success)
    Console.WriteLine(m.Groups[1].Value);

或多个匹配项的 C# 演示:

var line = "##MYPH[1j@_-jdf]####MYPH[2j@_-jdf]####MYPH[3j@_-jdf]####MYPH[4j@_-jdf]####MYPH[5j@_-jdf]##";
var pattern = @"##MYPH'[(.*?)]##";
var m = Regex.Matches(line, pattern)
        .Cast<Match>()
        .Select(p => p.Groups[1].Value)
        .ToList();
foreach (var s in m)
    Console.WriteLine(s);

试试这个:

##MYPH'[['S]+']##