首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从文本文件中提取两个括号之间的文本

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

Stack Overflow用户
提问于 2019-12-10 19:57:43
回答 1查看 108关注 0票数 1

样本文本:

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

我想提取:

“1974年海上人命安全公约”第一条;“防污公约”第一条;1966年“国际海上人命安全公约”第一条;第三条第4款;第三条第8款;第三条第11款

我使用了re.findall(r‘(.*III.*),但是返回:

“(包括默示修正)会受到拖延,有关当局缺乏协助这一进程的既定程序和承诺(”1974年海上人命安全公约“第一条;”防止船污公约“第1条;1966年”海牙公约“第1条;”第三守则“第4款;”第三守则“第8款;”第三守则“第11段)”

任何想法,我都快疯了!

EN

回答 1

Stack Overflow用户

发布于 2019-12-10 20:14:02

还不清楚您是否只想将括号与其内部的III匹配。在任何情况下,我都会在下面的检查中提供解决方案。

在括号之间提取文本

在使用这里时请参阅此正则表达式。

代码语言:javascript
运行
复制
\([^)]*\)

它的工作原理:

  • \(匹配这个字符字面上是(
  • [^)]*与除)以外的任何字符匹配任何次数。
  • \)匹配这个字符字面上是)

如果括号中包含III,则在括号之间提取文本

在使用这里时请参阅此正则表达式。

代码语言:javascript
运行
复制
\([^)]*I{3}[^)]*\)

与以前的逻辑相同,只需确保III存在(I{3})。

性能

在第二个示例中,I{3}精确匹配I 3次。这比III更有效。

还有人提到,.*?可以用来代替[^)]* --尽管这是事实,但由于.*?回溯以尽可能少地匹配,因此与其相关的性能成本也是存在的。否定字符类方法仍然是贪婪的,并且避免了回溯的需要,从而提高了效率。

您可以检查此性能比较这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59274478

复制
相关文章

相似问题

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