Skip to main content
 首页 » 编程设计

c#之使用正则表达式解析文本文件

2024年01月18日39EasonJim

我正在尝试解析一些 js 文件 (ExtJS) 并找到该文件中的类使用的所有依赖项。

示例 js 文件如下所示:

Ext.define('Pandora.controller.Station', { 
    extend: 'Ext.app.Controller', 
 
    refs: [{ 
        ref: 'stationsList', 
        selector: 'stationslist' 
    }], 
 
    stores: ['Stations', 'RecentSongs'], 
    ... 

我想要得到的是Ext.app.Controller。

使用我的代码,我能够获取包含 extend

的所有行
public void ReadAndFilter(string path) 
{ 
    using (var reader = new StreamReader(path)) 
    { 
        string line; 
        while ((line = reader.ReadLine()) != null) 
        { 
            if (line.Contains("extend")) 
            { 
                listBox2.Items.Add(line); 
            } 
        } 
    } 
} 

但这也会返回评论和其他不必要的东西。 我的想法是使用 RegEx 查找所有字符串。

我的问题是有时line在extend前后会有一些空格。
以下是一些可以在 js 文件中找到的示例:

extend          : 'Ext.AbstractPlugin', 
extend: 'Ext.util.Observable', 
@extends Sch.feature.AbstractTimeSpan 
extend      : "Sch.feature.AbstractTimeSpan", 
extend              : "Sch.plugin.Lines", 
extend : "Sch.util.DragTracker", 

在此运行 RegEx 应该返回:

Ext.AbstractPlugin 
Ext.util.Observable 
Sch.feature.AbstractTimeSpan 
Sch.plugin.Lines 
Sch.util.DragTracker 

这是我的尝试:extend[ ]*:[ ]*['"][a-zA-Z.]*['"],我已经测试过了 here , 但我只想得到引号或双引号之间的部分(这也可以验证吗?这样我们就可以排除那些带有第一个引号和第二个双引号的部分)。

RegEx 可能不是最快的,但我不知道我还能怎么做。
欢迎任何建议。

请您参考如下方法:

你可以简单地使用一个捕获组;您将需要的部分括在括号中:

extend[ ]*:[ ]*['"]([a-zA-Z.]*)['"] 

并且您可以通过 .Groups[1].Value 访问它们


编辑:根据要求:

extend *: *('|")(?<inside>[a-zA-Z.]*)\1 

有了这个,您可以使用 .Groups["inside"].Value 访问捕获的组