正则表达式匹配

时间:2016-07-13 13:43:05

标签: c# regex

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

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

  

## MYPH [J @ _- JDF] ##

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

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

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

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

我已为+切换*,然后我得到了一个匹配,但括号中没有任何内容。 我还尝试完全删除*+但仍然没有匹配。

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

2 个答案:

答案 0 :(得分:2)

您可以使用

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

请参阅regex demo。这个正则表达式适用于短字符串。对于较长的,请使用展开的等效##MYPH\[([^]]*(?:](?!##)[^]]*)*)]##(请参阅this demo)。

模式说明

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

C# demo

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

C# demo for multiple matches

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);

答案 1 :(得分:0)

试试这个:

##MYPH\[[\S]+\]##