我有一段带有一些注释标记的文本。方括号“(”和“)”或“[”和“]”用于确定注释的一部分(就像在普通文本中一样,就像这句话一样)。我想对其执行正则表达式以在输入中搜索某些内容,但是......它应该忽略所有注释。
问题是:
- 它们可以出现在任何地方(我不知道在哪里和有多少)
- 我不能轻易去除它们(执行替换正则表达式以消除所有出现),因为在原始文本中执行搜索正则表达式后我需要知道索引和长度
- 在处理大量输入文本时必须尽可能快
注解不能嵌套,不会出现“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 。特别是因为您想要最快的算法,也许您应该将其实现为状态机。
本质上,一次一个字符地遍历字符串并保留一堆匹配的注释定界符。只要您不在注释内,还要注意您要匹配的字符串。
澄清问题:您能否假设您要搜索的文本是固定文字?你关心空格的数量吗?我问是因为,一旦您消除了“注释”问题,您可能不需要正则表达式的所有功能来完成其余的搜索。
