题
我regex它是好的,但是因为它camed出不工作,以及在某些情况下
保持眼睛的消息预览会导致信息编辑做一些棘手的事情"\"
[\[]?[\^%#\$\*@\-;].*?[\^%#\$\*@\-;][\]]
其任务是找到模式,在一般看起来像那样
[A]
- A-char从设置^,%,#,$,*,@,-,;
- B-有些文字
- [和]被包括在模式
预期找到所有出现这种模式的测试串
黑色的福克斯[#sample1#][%sample2%]-[#sample3#]吃块。
但是,而不是预期的清单的比赛
- "[#sample1#]"
- "[%sample2%]"
- "[#sample3#]"
我得到这个
- "[#sample1#]"
- "[%sample2%]"
- "-[#sample3#]"
它似乎是会发生这样的问题也与其他chars在设定"A"。所以可能有人建议改变我的regex使它的工作因为我需要吗?
和不太重要的事情,如何使我regex排除模式,这看起来像那样
[ABC]
- A-char从设置^,%,#,$,*,@,-,;
- B-有些文字
- C-char从设置^,%,#,$,*,@,-,; 其他比
- [和]被包括在模式
例如
[$sample1#][%sample2@][%sample3;]
在此先感谢
年月
解决方案
\[([%#$*@;^-]).+?\1\]
加案文:
Black fox [#sample1#] [%sample2%] - [#sample3#] [%sample4;] eats blocks.
比赛
[#sample1#]
[%sample2%]
[#sample3#]
- 但不是
[%sample4;]
编辑
这对我的作品(产出不如预期,regex接受C#如预期):
Regex re = new Regex(@"\[([%#$*@;^-]).+?\1\]");
string s = "Black fox [#sample1#] [%sample2%] - [#sample3#] [%sample4;] eats blocks.";
MatchCollection mc = re.Matches(s);
foreach (Match m in mc)
{
Console.WriteLine(m.Value);
}
其他提示
为什么第一个"?"in"[[]?"
\[[\^%#\$\*@\-;].*?[\^%#\$\*@\-;]\]
将检测到你的种不同的字符串就好了
要更精确:
\[([\^%#\$\*@\-;])([^\]]*?)(?=\1)([\^%#\$\*@\-;])\]
将检测[A]
\[([\^%#\$\*@\-;])([^\]]*?)(?!\1)([\^%#\$\*@\-;])\]
将检测[ABC]
你有一个可选匹配的口方括:
[\]]?
第二部分的你的问题(并或许简化)试试这个:
\[\%[^\%]+\%\]|\[\#[^\#]+\#\]|\[\$[^\$]+\$\]
在这种情况下,有一个子模式为每一可能的界定符。这|文字是"或者",因此它将符合如果任何的3次表达形式相匹配。
每个表达式将:
- 开启支架
- 特别Char
- 一切,不是一个特殊char(1)
- 特别char
- 闭背面
(1)可能需要增加额外的排除样']"或"[',所以它不会不小心比赛跨过大量的文本,如:
[%MyVar:#]等等等等等[$OtherVar%]
Rob
不隶属于 StackOverflow