c#正则表达式排除某些字符
本文关键字:字符 排除 正则表达式 | 更新日期: 2023-09-27 18:14:04
我正在尝试使用Regex匹配c#中的字符串。具有以下格式的IsMatch
([anything here[anything here]anything here])+
示例:[mark[MARK]mark][[spacing]]
是有效字符串,但[[[spacing]spacing]
是无效字符串。
注意
"任何东西"
字符串不能包含
"["或"]"
,也可以为空
我尝试了一些像@"('[{1}'w*'[{1}'w*']{1}'w*']{1})+"
,但我不知道如何告诉Regex引擎,'w*
不能包含
"["或"]"
.
谢谢!
您需要使用平衡组,将整个表达式包含在非捕获组中,并使用+
(一次或多次出现)量化组:
^(?:'[(?>[^][]+|(?<o>)'[|(?<-o>)])*(?(o)(?!))])+$
查看regex演示
:
-
^
-字符串 起始 -
(?:
-非捕获+
量化组的开始-
'[
- a[
-
(?>[^][]+|(?<o>)'[|(?<-o>)])*
-搜索除[
和]
或[
以外的任何1+字符(将其添加到组"o"堆栈中)或]
(将其从组"o"堆栈中移除) -
(?(o)(?!))
-如果组"o"不为空,则匹配失败,寻找下一个配对的[...]
-
]
-
-
)+
-内部模式出现一次或多次 -
$
-字符串结束
使用这个正则表达式
^('[[^'[']]*'[[^'[']]*'][^'[']]*'])+$
正则表达式解释:
-
^
字符串 的匹配开始 -
(
创建群组 -
'[
匹配开始[
-
[^'[']]*
匹配0个或多个不[
且不]
的字符串 -
'[
再次匹配[
-
[^'[']]*
匹配0个或多个不[
且不]
的字符串 -
']
匹配关闭]
-
[^'[']]*
匹配0个或多个不[
且不]
(再次) -
']
匹配最后一个]
-
)
结束组 -
+
量词匹配前一组一个或多个出现 -
$
匹配字符串