假设VCD文件具有类似于下面的结构的VCD文件,作为最小示例:
#0 <--- section
b10000011#
0$
1%
0&
1'
0(
0)
#2211 <--- section
0'
#2296 <--- section
b0#
1$
#2302 <--- section
0$我想把整个过程分割成时间戳部分,并在每个部分中搜索特定的值。也就是说,首先隔离#0和#2211时间戳之间的部分,然后隔离#2211和#2296之间的部分,以此类推。
我试图用下面的方式来处理python。
search_space = "
#0
b10000011#
0$
1%
0&
1'
0(
0)
#2211
0'
#2296
b0#
1$
#2302
0$"# the "delimiter"
timestamp_regex = "\#[0-9]+(.*)\#[0-9]+"
for match in re.finditer(timestamp_regex, search_space, flags=re.DOTALL|re.MULTILINE):
print(match.groups())但它没有效果。用re包处理这种场景的正确方法是什么?
发布于 2022-07-20 17:40:32
这里需要使用惰性量词?。我做了一些小小的改变:
timestamp_regex = r"(\#[0-9]+)(.+?)(?=\#[0-9]+|\Z)"
for match in re.finditer(timestamp_regex, search_space, flags=re.DOTALL|re.MULTILINE):
print(f"section: {match.group(1)}\nchunk:{match.group(2)}\n----")产出:
section: #0
chunk:
b10000011#
0$
1%
0&
1'
0(
0)
----
section: #2211
chunk:
0'
----
section: #2296
chunk:
b0#
1$
----
section: #2302
chunk:
0$
----检查Regex101上的模式
详细信息:
(\#[0-9]+) -由#和一个或多个数字组成的第一个捕获组(.+?) -第二个捕获组-匹配任何一次或多次非贪婪(尽可能少地匹配)(?=\#[0-9]+|\Z) -对\#[0-9]+或\Z (即输入字符串的结尾)进行正向查找(第二个捕获组后面跟着另一个部分或字符串的结尾)。这里需要字符串的结尾,因为在最后一节中只有块,没有后续的#[0-9]+,所以块后面跟着字符串的结尾。https://stackoverflow.com/questions/73055054
复制相似问题