样本文本:
"115有客观证据证明,海事组织各项强制性文书及其修正案(包括默示修正)的国家法律的颁布受到拖延,有关当局缺乏协助这一进程的既定程序和承诺(“1974年海上人命安全公约”第一条;“防污公约”第1条;1966年“船舶防污公约”第1条;第三“守则”第4款;第三“守则”第8段;第三“守则”第11段)“。
我想提取:
“1974年海上人命安全公约”第一条;“防污公约”第一条;1966年“国际海上人命安全公约”第一条;第三条第4款;第三条第8款;第三条第11款
我使用了re.findall(r‘(.*III.*),但是返回:
“(包括默示修正)会受到拖延,有关当局缺乏协助这一进程的既定程序和承诺(”1974年海上人命安全公约“第一条;”防止船污公约“第1条;1966年”海牙公约“第1条;”第三守则“第4款;”第三守则“第8款;”第三守则“第11段)”
任何想法,我都快疯了!
发布于 2019-12-10 20:14:02
还不清楚您是否只想将括号与其内部的III
匹配。在任何情况下,我都会在下面的检查中提供解决方案。
在括号之间提取文本
在使用这里时请参阅此正则表达式。
\([^)]*\)
它的工作原理:
\(
匹配这个字符字面上是(
[^)]*
与除)
以外的任何字符匹配任何次数。\)
匹配这个字符字面上是)
如果括号中包含III
,则在括号之间提取文本
在使用这里时请参阅此正则表达式。
\([^)]*I{3}[^)]*\)
与以前的逻辑相同,只需确保III
存在(I{3}
)。
性能
在第二个示例中,I{3}
精确匹配I
3次。这比III
更有效。
还有人提到,.*?
可以用来代替[^)]*
--尽管这是事实,但由于.*?
回溯以尽可能少地匹配,因此与其相关的性能成本也是存在的。否定字符类方法仍然是贪婪的,并且避免了回溯的需要,从而提高了效率。
您可以检查此性能比较这里。
https://stackoverflow.com/questions/59274478
复制相似问题