如何忽略lookback中的特定单词?

2024-04-20 09:41:28 发布

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

完整字符串:

See Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.
**Here Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.**

我使用以下代码来获取**中的句子:

(?i)(?<=\D|![see])Item.+?1A.+?Risk Factors(?=\D)(.+?)(?=Item 1B|$)

通过给特定的单词See来忽略它。你知道吗

但还是要两句话。你知道吗


Tags: and字符串代码hereonpageitem句子
3条回答

如果要在lookback中添加一个量词)(?<!\bSee\b.*),可以使用PyPi regex module。你知道吗

(?<=\D)(?<!\bSee\b.*)Item.+?1A.+?Risk Factors(?=\D)(.+?)(?=Item 1B|$)

Python demo

假设**表示句子之间的差异,你可以看到第二个句子由于结尾的**而匹配。你知道吗

例如

import regex

pattern = r"(?i)(?<=\D)(?<!\bSee\b.*)Item.+?1A.+?Risk Factors(?=\D)(.+?)(?=Item 1B|$)"
test_str = ("See Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.\n"
            "**Here Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.**")
m = regex.search(pattern, test_str)
print(m.group())

输出

Item 1A. Risk Factors – Regulatory, Compliance and Legal on page 13.**

另一个选择是匹配您不想要的内容,并使用替换捕获您想要保留的内容。你知道吗

匹配SeeItem之前的整行,并使用lookback断言不是数字的模式在组1中捕获。你知道吗

(?:^(?:(?!\bItem\b.)*)See\b.*|((?<=\D)Item.+?1A.+?Risk Factors(?=\D).+?(?=Item 1B|$)))

Regex demo

我推荐另一种模式(?<=\*\*).+?(?=\*\*)

说明:

(?<=\*\*)-正向查找:断言什么是程序**

.+?-匹配一个或多个字符(非贪婪)

(?=\*\*)-正向展望:断言下面的内容是**

Demo

试试看

(?i)(?<=\D)(?<!See )Item.+?1A.+?Risk Factors(?=\D)(.+?)(?=Item 1B|$)

意思是在(?<=\D)之前有一个不同的数字,但也拒绝“See”的东西(?<!See )。你知道吗

相关问题 更多 >