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*不能包含

"["或"]"

.

谢谢!

c#正则表达式排除某些字符

您需要使用平衡组,将整个表达式包含在非捕获组中,并使用+(一次或多次出现)量化组:

^(?:'[(?>[^][]+|(?<o>)'[|(?<-o>)])*(?(o)(?!))])+$

查看regex演示

:

  • ^ -字符串
  • 起始
  • (?: -非捕获+量化组的开始
    • '[ - a [
    • (?>[^][]+|(?<o>)'[|(?<-o>)])* -搜索除[][以外的任何1+字符(将其添加到组"o"堆栈中)或](将其从组"o"堆栈中移除)
    • (?(o)(?!)) -如果组"o"不为空,则匹配失败,寻找下一个配对的[...]
    • ]
  • )+ -内部模式出现一次或多次
  • $ -字符串结束

使用这个正则表达式

^('[[^'[']]*'[[^'[']]*'][^'[']]*'])+$

正则表达式解释:

  • ^字符串
  • 的匹配开始
  • (创建群组
  • '[匹配开始[
  • [^'[']]*匹配0个或多个不 [且不 ]
  • 的字符串
  • '[再次匹配[
  • [^'[']]*匹配0个或多个不 [且不 ]
  • 的字符串
  • ']匹配关闭]
  • [^'[']]*匹配0个或多个不 [ ](再次)
  • ']匹配最后一个]
  • )结束组
  • +量词匹配前一组一个或多个出现
  • $匹配字符串