python - 使用 Python 在不同实例中分割 verilog 路径的正则表达式模式

标签 python regex string verilog

我有一个软件可以解析 Verilog 路径,并负责将这些路径映射到一系列对象。问题是找到一个正则表达式来分割实例名称序列中的 Verilog 路径。

Verilog 路径是用点连接的 Verilog 标识符序列。每个标识符都是一个实例名称。这 ”。” A.B.C 中的关系意味着,在模块层次结构中,A 是父级,B 是 A 的子级之一。C 是 B 的子级之一。

每个 Verilog 路径标识模块层次结构中的一个唯一实例。

伪代码:

Verilog Identifier A
Verilog Identifier B
Verilog Identifier C

作为 A 子级的父级 B 的实例 C 的路径:

    A.B.C

现在的问题是,Verilog 标识符可以是字母、数字、下划线 (_) 和美元符号 ($) 的任意序列。标识符的第一个字符只能是字母或下划线”,如本页所述:http://verilog.renerta.com/source/vrg00018.htm

在这种情况下,Python 将能够通过编写以下内容来分割路径:

>>> path = "a.verilog.path"
>>> print path.split(".")
['a', 'verilog', 'path']

不幸的是,标识符可能是转义标识符

转义标识符以反斜杠开头并以空格结尾。在反斜杠和空格内可以有任何字符(空格除外),甚至是点!

\an_escaped_identifier_that_ends_with_space
\another-identifier,withsome.dots)insideit_ending_withspace 

所以事情变得更加复杂,你不能再依赖 split 了。 这是一个例子:

Verilog Identifier identifier1
Verilog Identifier \escaped.identifier_2 
Verilog Identifier identifier3

父级\escaped.identifier_2(标识符1的子级)的实例标识符3的路径:

    identifier1.\escaped.identifier_2 .identifier3

那么,我们如何使用 Python 的 re 模块来寻址由任意数量的标识符和/或转义标识符组成的所有可能的 Verilog 路径?

最佳答案

([a-z_][a-z0-9$_]*|\\\S* ) 应匹配常规标识符和转义标识符。

https://regex101.com/r/IxLakb/2

关于python - 使用 Python 在不同实例中分割 verilog 路径的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46207665/

相关文章:

java - 使用正则表达式如何忽略评论或引用中的特定字符?

python - 如何从 csv 文件自动获取标题

string - golang 中的 []string 和 ...string 有什么区别?

python - 将消息从一个类(class)发送到另一个类(class)

python - 在基于类的 View 中限制经过身份验证的用户的 `UpdateView` 数据集

python - 使用 openpyxl 排序和自动过滤 Excel

C 控制台输入

python - Pandas 按索引对所有其他列求和,其中名称和索引大小发生变化

java - 如何查找 ArrayList 中的字符串是否包含字符形式的数字

java - 删除字符串之间的空格