I asked this question a long time ago, I wish I had read the answers to When not to use Regex in C# (or Java, C++ etc) first!
我希望使用 Regex(正则表达式)获取我的 C# 源代码中所有字符串的列表,包括其中嵌入了双引号的字符串。
这应该不难,但是在我花时间尝试构建 Regex 表达式之前,有人已经有了“预装”的吗?
这并不像最初看起来那么容易,因为
- “av\”d”
- @”ab””cd”
- @”ab”””
- @”””ab”
- 等等
最佳答案
我将此作为我的答案发布,以便它在其他阅读问题时脱颖而出。
正如在对我的问题的有用评论中所指出的,很明显正则表达式不是在 C# 代码中查找字符串的好工具。在我花时间提醒自己正则表达式语法的时候,我本可以编写一个简单的“解析器”。 –(解析器是一个结束语句,因为注释等中没有“,这是我正在处理的源代码。)
这似乎总结得很好:
Some people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems.
然而,在它破坏我的代码之前,我将使用 Blixt 发布的正则表达式,但如果它给我带来问题,我不会在编写我自己的解析器之前花费匹配时间来尝试修复它。例如,作为 C# 字符串,它是
@"@Q(?:[^Q]+|QQ)*Q|Q(?:[^Q\\]+|\\.)*Q".Replace('Q', '\"')
更新,上面的regEx有问题,所以我自己写了解析器,包括写单元测试花了大约2个小时来写解析器。这比我花在网上寻找(和测试)预装正则表达式的时间要少得多。
我看到的问题是,我倾向于避免使用 Regex 而只是自己编写字符串处理代码,然后有很多人声称我不使用 Regex 是在浪费客户的钱。但是,每当我尝试使用 Regex 时,看似简单的匹配模式很快就会变得更难匹配。 (没有我读过的关于在 .net 中使用 Regex 的在线文章,有一个很好的说明,明确说明何时不使用 Regex。它的 MSDN 文档也是如此)
让我们看看是否可以帮助解决这个问题,我刚刚创建了一个堆栈溢出问题“When not to use Regex ”
关于c# - 正则表达式解析 C# 源代码以查找所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965667/