提问人:Moonderland 提问时间:6/12/2023 最后编辑:InSyncMoonderland 更新时间:6/12/2023 访问量:68
使用正则表达式获取 C# 文件字段和属性
Get C# file fields and properties using regular expression
问:
我想使用正则表达式匹配(从 .cs 文件中选择)属性名称、字段名称和使用它们的位置。
这是示例类:
using System;
... // usings
using Grpc.Net.Client;
using UI = Gtk.Builder.ObjectAttribute;
namespace DummyProject;
public class MainWindow : Window
{
[UI] private readonly MenuItem _aboutMenuItem;
[UI] private readonly MenuItem _openFolderItem;
[UI] private readonly MenuItem _openFileItem;
[UI] private readonly Viewport _fileViewport;
[UI] private readonly Notebook _codeNotebook;
private readonly SourceView _codeSourceView;
private readonly FileViewer _fileViewer;
private readonly Files.FilesClient _filesClient;
public FileSystemViewer FileSystemViewer { get; }
public MainWindow()
{
_fileViewer = new FileViewer();
// some code
}
// methods
结果将是:、、、、、_aboutMenuItem
_openFolderItem
_openFileItem
_fileViewport
_codeNotebook
_codeSourceView
_fileViewer
_filesClient
FileSystemViewer
我试过这个正则表达式:^(?:(?=[^()]*$))?(?:(?!.*\b(namespace|return|using|class)\b))[\t \b]*(?:[\[\]a-zA-Z0-9_.]+\s+)?(?:(?:private|public|protected|internal)\s+)?(?:(?:static readonly|static|const|readonly|volatile|virtual|override)\s+)?(?:(?:[a-zA-Z0-9\.]+)\s+)?(\w+)\s*
但是这个正则表达式匹配不正确(参见 https://regex101.com/r/ZbctGa/3)
有什么建议吗?
答:
1赞
Reilas
6/12/2023
#1
您可以使用以下命令来捕获属性和字段。
(?:public|private)(?! class) (?:readonly )?(?:.+?) (.+?)[ ;]
输出
_aboutMenuItem
_openFolderItem
_openFileItem
_fileViewport
_codeNotebook
_codeSourceView
_fileViewer
_filesClient
FileSystemViewer
评论
0赞
M H
6/12/2023
是否有理由使用文字空格而不是 or ? 在这种模式中,我们将处理源代码中不同作品/属性等之间的额外空格。\s
\s+
(?:public|private)(?!\s+class)\s+(?:readonly\s+)?(?:.+?)\s+(.+?)[\s+;]
上一个:在 C 中处理转义序列#
下一个:正则表达式忽略下一场比赛
评论