c# - 仅当前面没有制表符或空格时才匹配括号组
问题描述
我的 c# 正则表达式代码:
Regex regex = new Regex(@"\((.*?)\)");
return regex.Matches(str);
...很好地匹配下面数据块中的所有“paren组”:
(dirty FALSE)
(composite [txtModel])
(view [star2])
(creationIndex 0)
(creationProps )
(instanceNameSpecified FALSE)
(containsObject nil)
(sName ApplicationWindow)
(txtDynamic FALSE)
(txtSubComposites )
(txtSubObjects )
(txtSubConnections )
但是下面的数据块让它偏离了轨道:
([vog317] of ZZconstant
(dirty FALSE)
(composite [gpGame])
(view [nil])
(creationIndex 1)
(creationProps composite !/gpGame sName Constraint4)
(instanceNameSpecified TRUE)
(containsObject ZZconstant)
(sName NoGo_Track_back_Co)
(description "")
(parameters "")
(languageType Prefix)
(explanation "Some sample text here!")
(salience 1)
(condition "
(if (eq ?hoer9_Cl:sName extens)
then
(or (eq ?Starry:sName sb405)
(eq ?Starry:sName sb43)
(eq ?Starry:sName sb455)
(eq ?Starry:sName sb48)
)
)
")
)
请注意 inner-paren 组:
(if (eq ?hoer9_Cl:sName extens)
then
(or (eq ?Starry:sName sb405)
(eq ?Starry:sName sb43)
(eq ?Starry:sName sb455)
(eq ?Starry:sName sb48)
)
)
括号括起来的数据的那个小子块应该仅仅被视为(condition
括号组的一部分,而不是与正则表达式模式匹配。排除它的方法是让模式查看以下两个异常之一:
- 任何
(
以制表符或空格开头的内容都应从匹配中排除。 - 任何
(if
后跟任何类型的空格都应从匹配中排除。
那么如何修改我的正则表达式模式\((.*?)\)
以使其符合上述两条规则?我在Regex Storm中尝试了一段时间,但我对 regex 的初学者太过分了,无法解决。
解决方案
推荐阅读
- antlr4 - 如何抑制antlr4中生成的语法警告
- java - 无法确定 Instant 的数据类型
- python - Python:使用 sudo 调用 C 函数
- apache-spark - 获取RDD读取路径中的文件数
- npm - 在 Git LFS 中跟踪包锁定文件(例如 NPM 的 package-lock.json)是一个好主意吗?
- python - Python将numpy数组序列化为字节串
- laravel - 如何在资源集合中构建数据?
- java - 在 InheritanceType.JOINED 中使用 AttributeConverter 映射 MySQL ENUM 在 Hibernate 5.3.6 (JPA 2.1+) 上抛出 IllegalArgumentException:没有枚举常量
- snowflake-cloud-data-platform - 如何在雪花中检索序列的增量?
- asp.net - 令牌应该在路由中吗?