用于在 AutoCAD 图形上搜索资产标签的正则表达式

Regex to search asset tags on AutoCAD drawings

我没有在这里发布问题,因为我想尽我所能为自己找到解决这个问题的方法。但不幸的是,经过整夜搜索和阅读不同的 Regex 文章和文档后,我找不到答案。

我写了一个脚本,可以从 AutoCAD 转换的 PDF 中溢出注释。问题是,哪张图有不同的资产标签信息模式。

我们的约定是 99XX9999(两个数字,两个字母,四个数字)。

有些图纸保留了这种模式,有些则没有。我们可以找到 99XX(space)9999 OR 99(space)XX(space)9999

我解决了这部分问题,但还有另一种变体我无法按照以下方式解决:

'''

{'/Border': [0, 0, 0], '/Contents': '0811', '/F': 64, '/NM': 'b4499c47-d2d2-4c03-b13c-ec3b7b332ec3', '/P': IndirectObject(52, 0), '/Rect': [714, 304, 698, 314], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '29', '/F': 64, '/NM': 'b518c663-42eb-4861-a717-a00118d61fd2', '/P': IndirectObject(52, 0), '/Rect': [206, 369, 195, 378], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': 'HV', '/F': 64, '/NM': '1db0a6b1-6aee-4a2d-bacf-2a996680cdcb', '/P': IndirectObject(52, 0), '/Rect': [212, 369, 201, 378], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '0832', '/F': 64, '/NM': '0250033f-5bc0-4d46-879a-a1ae0147352d', '/P': IndirectObject(52, 0), '/Rect': [212, 365, 195, 374], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '29', '/F': 64, '/NM': '7b372206-1b18-4c9f-813d-4d73ca52be40', '/P': IndirectObject(52, 0), '/Rect': [140, 392, 129, 401], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': 'HV', '/F': 64, '/NM': 'bdc97ccd-ee7c-406a-a06c-1649a5f5f712', '/P': IndirectObject(52, 0), '/Rect': [146, 392, 135, 401], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '0824', '/F': 64, '/NM': '9f434537-57a3-4c40-bb8b-a0df6ea087aa', '/P': IndirectObject(52, 0), '/Rect': [146, 388, 129, 397], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '%%C25', '/F': 64, '/NM': 'a2ace5cb-21be-4df7-b541-ce87a8ee81bc', '/P': IndirectObject(52, 0), '/Rect': [145, 379, 132, 388], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': 'APOUTO RD', '/F': 64, '/NM': '948a363f-989d-4d00-afa1-a8bc45ad9729', '/P': IndirectObject(52, 0), '/Rect': [1162, 355, 1136, 364], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': 'HORTICULTURAL WATER', '/F': 64, '/NM': '5a6cedb6-cdf0-4784-817f-c17f1de58f5a', '/P': IndirectObject(52, 0), '/Rect': [1171, 350, 1126, 358], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '%%C101', '/F': 64, '/NM': '2ee5947a-9062-415f-a242-f4b7b2a6441c', '/P': IndirectObject(52, 0), '/Rect': [767, 428, 758, 443], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}--------------------------------------------------------------------------------

'''

我们可以看到 '/Contents': '29'...然后 '/Contents': 'HV'...然后 '/Contents': '0832'...

我在 regex101.com 上尝试了这种方法 (?<='/Contents':\s')([0-9]{2})(?=') 的多种变体,但都无济于事。我只能捕获前两位数字。

按照我的逻辑,我应该想办法拥有多个 'lookaround' 但无法实现。

最终,正则表达式代码应该是上面加上我已经使用的代码 ([A-Z]?[0-9]{2,3}\s?[A-Z]{2,3}\s?[0-9]{3,4})

根据 regex101.com 站点(见图),模式的三个部分发生后会发生换行。

明确一点,我说的是 100 多幅图画,每幅画都有 100 多条线条。

拜托,任何贡献都将受到赞赏。如果不是正则表达式本身,至少我应该采取的方向会很好。

此致,

试试这个

s="{'/Border': [0, 0, 0], '/Contents': '0811', '/F': 64, '/NM': 'b4499c47-d2d2-4c03-b13c-ec3b7b332ec3', '/P': IndirectObject(52, 0), '/Rect': [714, 304, 698, 314], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '29', '/F': 64, '/NM': 'b518c663-42eb-4861-a717-a00118d61fd2', '/P': IndirectObject(52, 0), '/Rect': [206, 369, 195, 378], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': 'HV', '/F': 64, '/NM': '1db0a6b1-6aee-4a2d-bacf-2a996680cdcb', '/P': IndirectObject(52, 0), '/Rect': [212, 369, 201, 378], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '0832', '/F': 64, '/NM': '0250033f-5bc0-4d46-879a-a1ae0147352d', '/P': IndirectObject(52, 0), '/Rect': [212, 365, 195, 374], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '29', '/F': 64, '/NM': '7b372206-1b18-4c9f-813d-4d73ca52be40', '/P': IndirectObject(52, 0), '/Rect': [140, 392, 129, 401], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': 'HV', '/F': 64, '/NM': 'bdc97ccd-ee7c-406a-a06c-1649a5f5f712', '/P': IndirectObject(52, 0), '/Rect': [146, 392, 135, 401], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '0824', '/F': 64, '/NM': '9f434537-57a3-4c40-bb8b-a0df6ea087aa', '/P': IndirectObject(52, 0), '/Rect': [146, 388, 129, 397], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '%%C25', '/F': 64, '/NM': 'a2ace5cb-21be-4df7-b541-ce87a8ee81bc', '/P': IndirectObject(52, 0), '/Rect': [145, 379, 132, 388], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': 'APOUTO RD', '/F': 64, '/NM': '948a363f-989d-4d00-afa1-a8bc45ad9729', '/P': IndirectObject(52, 0), '/Rect': [1162, 355, 1136, 364], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': 'HORTICULTURAL WATER', '/F': 64, '/NM': '5a6cedb6-cdf0-4784-817f-c17f1de58f5a', '/P': IndirectObject(52, 0), '/Rect': [1171, 350, 1126, 358], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}-------------------------------------------------------------------------------- {'/Border': [0, 0, 0], '/Contents': '%%C101', '/F': 64, '/NM': '2ee5947a-9062-415f-a242-f4b7b2a6441c', '/P': IndirectObject(52, 0), '/Rect': [767, 428, 758, 443], '/Subtype': '/Square', '/T': 'AutoCAD SHX Text'}--------------------------------------------------------------------------------}"


A=B=C=''
for i in s.split("/Contents': '"):
  e=i[ 0 : i.index(",")-1]
  if e.isdigit() and len(e) == 2 :
      A=e
  if e.isalpha() and len(e) == 2 :   
      B=e
  if e.isdigit() and len(e) == 4 :
      C=e
      print(A+B+C)
      A=B=C=''

[输出]:

0811
29HV0832
29HV0824