从文本文件中提取两个括号之间的文本

2024-03-29 11:53:42 发布

您现在位置:Python中文网/ 问答频道 /正文

示例文本:

115有客观证据表明,为海事组织各项强制性文书及其修正案(包括默示修正案)颁布国家法律的工作受到拖延,有关当局缺乏既定程序和协助这一进程的承诺(《1974年国际海上人命安全公约》,第一条;《防污公约》,第1条;LL 1966,第1条;III法典,第4款;III法典,第8款;III法典,第11款)。

我想提取:

SOLAS 1974,第一条;MARPOL,第1条;LL 1966,第1条;III代码,第4款;III代码,第8款;III代码,第11款”

我用过关于芬德尔(r'((.*III.*)但是它返回:

(包括默许修正案)受到拖延,有关当局缺乏既定的程序和承诺来协助这一进程(《1974年国际海上人命安全公约》第一条;《防污公约》第1条;《1966年国际法》第1条;第三法第4款;第三法第8款;第三法第11款)。

有什么主意,快把我逼疯了!你知道吗


Tags: 代码文本程序证据示例进程iii国际
1条回答
网友
1楼 · 发布于 2024-03-29 11:53:42

不清楚您是否只想匹配括号中的III。在任何情况下,我都会提供解决方案,有没有检查下面。你知道吗


在括号中提取文本

查看正在使用的正则表达式here。你知道吗

\([^)]*\)

工作原理:

  • \(按字面意思匹配此字符(
  • [^)]*匹配除)之外的任何字符任意次数
  • \)按字面意思匹配此字符)

如果包含III

看到这个regex在使用here。你知道吗

\([^)]*I{3}[^)]*\)

与前面的逻辑相同,只是确保III存在(I{3})。你知道吗


性能

在第二个例子中,I{3}正好匹配I3次。这比III更有效。你知道吗

还提到了.*?可以用来替换[^)]*——虽然这是真的,但是由于.*?回溯到尽可能少的匹配,因此与之相关的性能代价是存在的。取反的字符类方法保持贪婪,避免了回溯的需要,从而提高了效率。你知道吗

您可以检查这个性能比较here。你知道吗

相关问题 更多 >