使用正则表达式解析文本文件
本文关键字:文本 文件 正则表达式 | 更新日期: 2023-09-27 18:33:25
我正在尝试解析一些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);
}
}
}
}
但这也会返回注释和其他不必要的内容。我的想法是使用正则表达式来查找所有字符串。
我的问题是有时行在扩展前后有一些空格。
以下是可以在 js 文件中找到的一些示例:
extend : 'Ext.AbstractPlugin', extend: 'Ext.util.Observable', @extends Sch.feature.AbstractTimeSpan extend : "Sch.feature.AbstractTimeSpan", extend : "Sch.plugin.Lines", extend : "Sch.util.DragTracker",
在此上运行正则表达式应该返回:
Ext.AbstractPlugin
Ext.util.Observable
Sch.feature.AbstractTimeSpan
Sch.plugin.Lines
Sch.util.DragTracker
这是我的尝试:extend[ ]*:[ ]*['"][a-zA-Z.]*['"]
,我已经在这里测试过了,但我只想在引号或双引号之间获取部分(这也可以验证吗?这样我们就可以排除那些带有第一个引号和第二个双引号的)。
正则表达式可能不是最快的,但我不知道我还能怎么做。
欢迎任何建议。
您可以简单地使用捕获组; 将所需部分括在括号之间:
extend[ ]*:[ ]*['"]([a-zA-Z.]*)['"]
您可以通过.Groups[1].Value
访问它们
编辑:根据要求:
extend *: *('|")(?<inside>[a-zA-Z.]*)'1
有了这个,您可以使用.Groups["inside"].Value
访问捕获的组
extend's*:'s?("|')(.*)'1
'1
是对("|')
括号捕获的任何内容的引用,因此它将强制引号正确匹配。
在这种情况下,匹配的部分(您想要的)最终会变成Groups[2].Value
另外,只是一个样式建议:不要使用[ ]*
来匹配空格,这些分组括号在空时看起来太混乱了。一个简单的's*
更容易阅读和清晰理解。
您只缺少一个捕获组。请注意[a-zA-Z.]*
周围的括号
extend([ ]*):[ ]*['"]([a-zA-Z.]*)['"]
要实现此尝试:
var result = from Match match in Regex.Matches(line, "extend([ ]*):[ ]*['"]([a-zA-Z.]*)['"]")
select match.ToString();