Skip to main content
 首页 » 编程设计

c#之正则表达式忽略模式

2024年01月01日57soundcode

我有一段带有一些注释标记的文本。方括号“(”和“)”或“[”和“]”用于确定注释的一部分(就像在普通文本中一样,就像这句话一样)。我想对其执行正则表达式以在输入中搜索某些内容,但是......它应该忽略所有注释。

问题是:

  • 它们可以出现在任何地方(我不知道在哪里和有多少)
  • 我不能轻易去除它们(执行替换正则表达式以消除所有出现),因为在原始文本中执行搜索正则表达式后我需要知道索引和长度
  • 在处理大量输入文本时必须尽可能快

注解不能嵌套,不会出现“123(Hello(World))”之类的。如果注释括号是字符串的一部分(在引号中),则它们是文本的一部分,因此没有注释。

这是一个例子:

Input Text: "Hello, my (real) name is John. I worked in England (near London) on a real german restaurant.". 
 
Search Regex: "my.*?real" 
 
Output: "my (real) name is John. I worked in England (near London) on a real" (index=7, length=67) 

解决这个问题的最佳方法是什么?

请您参考如下方法:

我想知道在这种情况下 RegEx 是不是你的 friend 。特别是因为您想要最快的算法,也许您应该将其实现为状态机。

本质上,一次一个字符地遍历字符串并保留一堆匹配的注释定界符。只要您不在注释内,还要注意您要匹配的字符串。

澄清问题:您能否假设您要搜索的文本是固定文字?你关心空格的数量吗?我问是因为,一旦您消除了“注释”问题,您可能不需要正则表达式的所有功能来完成其余的搜索。