正则表达式捕获第一个和最后一个括号内的所有内容[重复]
Posted
技术标签:
【中文标题】正则表达式捕获第一个和最后一个括号内的所有内容[重复]【英文标题】:Regular expression to capture everything inside the first and last bracket [duplicate] 【发布时间】:2020-10-09 10:01:43 【问题描述】:我正在制作一个解析 .cs 文件的解析器。在网站上上传 .cs 文件后,我必须解析 .cs 文件命名空间内的所有内容。我想用正则表达式来完成这个,但我不知道如何做到这一点,因为我是正则表达式的新手。
我将如何编写一个表达式来输出 .cs 文件的第一个和最后一个括号内的所有内容? 例如,这是一个简单的 .cs 文件:
namespace Application
<----------------------------------
class Members
int testInt = 10;
string testString = 'test';
public void testMethod()
<----------------------------------
我想获取代码示例中箭头之间的所有代码。
我听过并读过一些关于团体的东西,但我还不太明白。如果有人可以帮助我,我将不胜感激。
【问题讨论】:
您在尝试使用正则表达式解析 .cs 文件时走错了方向。是的,您将能够创建一个表达式来解析这个特定的 sn-p,但您会发现每个 sn-p 都需要不同的表达式。如果你想解析一种编程语言,你必须build a compiler。 @DourHighArch 谢谢!我知道这可能是构建解析器的最佳方式,我只是没有太多时间阅读它。由于我只有几天的时间来完成这项工作,我认为正则表达式将是更快的选择。另外,由于我不是 C# 专家,所以现在自己构建编译器可能不适合我。 使用正则表达式不会更快,因为您将不得不创建无限数量的正则表达式,而且您不会活那么久。如果您仅对在命名空间中提取代码感兴趣,您可以构建扫描器部分。但是你说“第一个和最后一个括号内的所有内容”,这与命名空间不同。如果你 explained the problem you are trying to solve, not just what solution you have decided to use 会很有帮助。 【参考方案1】:不用正则表达式也可以得到括号内的值。
try
string output = input.Substring(input.IndexOf('') + 1, input.LastIndexOf('') - 1);
catch (Exception ex)
//Code to handle this
注意:您需要处理这种情况,其中字符串可以为空并且如果它没有结尾。
【讨论】:
谢谢!但是您的代码会引发此错误System.ArgumentOutOfRangeException: 'Index and length must refer to a location within the string. '
我已经测试过了,你想通过什么输入?
我正在尝试传递一个字符串,其中包含 .cs 文件的所有代码,就像我上面的示例一样。会不会是using System
等导致了问题?这是上面的代码和我试图通过的代码之间的唯一区别。
@Stefan 请注意,这只处理您问题中的特定情况;一个命名空间,没有代码、cmets、字符串、属性或任何在该命名空间之外的大括号。它不处理一般的 .cs 文件。以上是关于正则表达式捕获第一个和最后一个括号内的所有内容[重复]的主要内容,如果未能解决你的问题,请参考以下文章