我正在尝试在文档中搜索匹配的字符串(占位符),我正在努力使正则表达式正确。
我想找的字符串将采用这种格式,可以在文档的任何地方找到它
## MYPH [J @ _- JDF] ##
我尝试使用的正则表达式是:
##MYPH\[([-!$%@^&*()_+|~=`{}:";'<>?,.\/]+(\w)+(\W)+)\]##
##MYPH[]##
将始终相同,但方括号之间的文字可以是任何内容。
最后我只需要回答方括号中的内容。
我一直在测试这个,但我没有得到匹配。
我已为+
切换*
,然后我得到了一个匹配,但括号中没有任何内容。
我还尝试完全删除*
和+
但仍然没有匹配。
谁能告诉我我做错了什么?
答案 0 :(得分:2)
您可以使用
##MYPH\[(.*?)]##
请参阅regex demo。这个正则表达式适用于短字符串。对于较长的,请使用展开的等效##MYPH\[([^]]*(?:](?!##)[^]]*)*)]##
(请参阅this demo)。
模式说明:
##MYPH\[
- 文字##MYPH[
(.*?)
- (捕获组1)任何0+个字符,但换行符(添加RegexOptions.Singleline
标记也可以匹配换行符)直到第一个]##
- 文字字符串]##
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]+\]##