首页 > 解决方案 > 正则表达式魔法,有了它,VS Code 毁了我的整个 Jupyter Notebook

问题描述

我不小心碰到了正则表达式来解决这个小谜团,然后我的笔记本在处理它时爆炸了(感谢 VS 代码),我正在尝试重新创建它。

示例文本是我的正则表达式在BOLD中捕获的内容:

['03/11/2009 起诉书已提交。向 LORAIN 县治安官发出的带有起诉书副本的传票。持有毒品的起诉书,2925.11(A),F-5;毒品相关犯罪,2925.14(C) (1),M-4;吸毒,2925.11(A),MM'],["2009 年 3 月 16 日返回警长的返回 - 我在 2009 年 3 月 12 日为被告提供了居住服务,PHIL R. STAMMITTI,警长"],['03 /19/2009 提审被告被提审。放弃阅读起诉书,提出无罪抗辩。债券续订。 2901.07 并且在收集到合适的 DNA 样本之前不得发布。'],['2016 年 12 月 15 日已发行债券:JC 保释债券(美国)发行 4,000 美元保证金']

我的意图是捕获所有修改后的代码部分(下面的示例格式),出现在短语“INDICTMENT FILED”之后,直到之后出现的第一个“]”。问题是,修改后的代码段可以有这些不同的格式:

2913.1, 2913.12, 2913.123, 2913.1234, 2913.1(A), 2913.12(A)(1)

另外,我当前的正则表达式确实获取了修改后的代码部分的编号,并没有获取所有种类的括号内容(我在下面的正则表达式当前匹配的内容中加粗了),不幸的是,正在获取第二个加粗部分(其中我不想)。我需要第一次列出短语“INDICTMENT FILED”,以及该字符串中该短语之后的所有修订代码部分,直到找到“]”然后停止匹配。

到目前为止,这是我的正则表达式,它并没有完全工作。我已经解决了这个问题,它只匹配我想要的东西,然后,你知道,计算机,而不是每 30 秒备份一次,然后 blammo,我来了。我的正则表达式:

(\d{4}\.\d{1,4}.*?\))

标签: pythonregex

解决方案


你快到了!你的正则表达式的问题是,在它之后\d{1,4},它匹配.*?=任何东西,直到它看到一个). 当 之后的括号中没有任何内容时2901.07,它将匹配所有内容,直到)结尾的下一个AMERICAN)

这是我想出的:

\d{4}\.\d{2}(?:\(\w+\))*

在这里试试

解释:

  • \d{4}\.\d{1,4}:4个数字,句号,1-4个数字(你有这部分)
  • (?: ... )*: *= 本组零个或多个。?:表示不要将其捕获为编号组
  • \(\w+\): 文字(后跟 1 个或多个单词字符,后跟文字)

推荐阅读