c# - 正则表达式解析 C# 源代码以查找所有字符串

标签 c# .net regex

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/

相关文章:

c# - 返回 Excel 变量 C#

.net - Enterprise Service Bus、.NET Service Bus、NServiceBus 和总线上的轮子

c# - 根据声明的类筛选由 TypeDescriptor.GetProperties() 返回的属性

c# - 使用自定义 CSS 设计 Orchard 菜单

regex - 用于查找电话号码的正则表达式

c# - 使用命名空间解析 XML 文件

c# - 不一致的可访问性 : Parameter type is less accessible than method

c# - ASP.NET MVC - 未找到 NLog 文件目标

java - 正则表达式匹配单个单词

python - 使用 re.findall 匹配组前的点的正则表达式