获取C#文件中的字段和属性,使用正则表达式。

huangapple go评论104阅读模式
英文:

Get C# file fields and properties using regular expression

问题

我想要使用正则表达式匹配(从.cs文件中选择)属性名称、字段名称以及它们被使用的位置。

这是一个示例类:

  1. using System;
  2. ... // 使用的命名空间
  3. using Grpc.Net.Client;
  4. using UI = Gtk.Builder.ObjectAttribute;
  5. namespace DummyProject;
  6. public class MainWindow : Window
  7. {
  8. [UI] private readonly MenuItem _aboutMenuItem;
  9. [UI] private readonly MenuItem _openFolderItem;
  10. [UI] private readonly MenuItem _openFileItem;
  11. [UI] private readonly Viewport _fileViewport;
  12. [UI] private readonly Notebook _codeNotebook;
  13. private readonly SourceView _codeSourceView;
  14. private readonly FileViewer _fileViewer;
  15. private readonly Files.FilesClient _filesClient;
  16. public FileSystemViewer FileSystemViewer { get; }
  17. public MainWindow()
  18. {
  19. _fileViewer = new FileViewer();
  20. // 一些代码
  21. }
  22. // 方法

结果将是:_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)

有什么建议吗?

英文:

I want to match (select from .cs file) property names, field names and places where they are used using regular expression.

This is example class:

  1. using System;
  2. ... // usings
  3. using Grpc.Net.Client;
  4. using UI = Gtk.Builder.ObjectAttribute;
  5. namespace DummyProject;
  6. public class MainWindow : Window
  7. {
  8. [UI] private readonly MenuItem _aboutMenuItem;
  9. [UI] private readonly MenuItem _openFolderItem;
  10. [UI] private readonly MenuItem _openFileItem;
  11. [UI] private readonly Viewport _fileViewport;
  12. [UI] private readonly Notebook _codeNotebook;
  13. private readonly SourceView _codeSourceView;
  14. private readonly FileViewer _fileViewer;
  15. private readonly Files.FilesClient _filesClient;
  16. public FileSystemViewer FileSystemViewer { get; }
  17. public MainWindow()
  18. {
  19. _fileViewer = new FileViewer();
  20. // some code
  21. }
  22. // methods

Result will be: _aboutMenuItem, _openFolderItem, _openFileItem, _fileViewport, _codeNotebook, _codeSourceView, _fileViewer, _filesClient, FileSystemViewer

I've tried this regular expression: ^(?:(?=[^()]*$))?(?:(?!.*\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*

But this regex matches incorrectly (see https://regex101.com/r/ZbctGa/3)

Any suggestions?

答案1

得分: 1

以下是翻译好的部分:

  1. _aboutMenuItem
  2. _openFolderItem
  3. _openFileItem
  4. _fileViewport
  5. _codeNotebook
  6. _codeSourceView
  7. _fileViewer
  8. _filesClient
  9. FileSystemViewer
英文:

You can use the following to capture the properties and fields.

  1. (?:public|private)(?! class) (?:readonly )?(?:.+?) (.+?)[ ;]

Output

  1. _aboutMenuItem
  2. _openFolderItem
  3. _openFileItem
  4. _fileViewport
  5. _codeNotebook
  6. _codeSourceView
  7. _fileViewer
  8. _filesClient
  9. FileSystemViewer

huangapple
  • 本文由 发表于 2023年6月12日 00:38:29
  • 转载请务必保留本文链接:https://go.coder-hub.com/76451475.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定