正则表达式匹配
本文关键字:正则表达式 | 更新日期: 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]+']##