首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -使用re对多行文本段进行Disect/令牌化和迭代

Python -使用re对多行文本段进行Disect/令牌化和迭代
EN

Stack Overflow用户
提问于 2022-07-20 16:20:21
回答 1查看 35关注 0票数 0

假设VCD文件具有类似于下面的结构的VCD文件,作为最小示例:

代码语言:javascript
复制
#0 <--- section
b10000011#
0$
1%
0&
1'
0(
0)
#2211 <--- section
0'
#2296 <--- section
b0#
1$
#2302 <--- section
0$

我想把整个过程分割成时间戳部分,并在每个部分中搜索特定的值。也就是说,首先隔离#0#2211时间戳之间的部分,然后隔离#2211#2296之间的部分,以此类推。

我试图用下面的方式来处理python。

代码语言:javascript
复制
search_space = "
#0
b10000011#
0$
1%
0&
1'
0(
0)
#2211 
0'
#2296 
b0#
1$
#2302
0$"
代码语言:javascript
复制
# 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包处理这种场景的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-20 17:40:32

这里需要使用惰性量词?。我做了一些小小的改变:

代码语言:javascript
复制
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----")

产出:

代码语言:javascript
复制
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]+,所以块后面跟着字符串的结尾。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73055054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档