Python 如何使用正则表达式搜索并避免列表中的条目?
我在文件中有一长串条目,格式如下:Python 如何使用正则表达式搜索并避免列表中的条目?,python,regex,Python,Regex,我在文件中有一长串条目,格式如下: ” e、 g 12345=“第3节已准备好审查” 24680=“鲍勃回顾第4章” 我需要找到一种方法,在单词/短语/句子的开头插入额外的文本,但前提是它不是以几个关键词中的一个开头 附加文本:“完成:” 关键词列表:keywords\u List=[“部分”、“页面”、“标题”] e、 g 12345=“第3节已准备好审核”(无需更改-句子以列表中的“Section”开头) 24680=“Complete:Bob复习第4章”(“Complete:”添加到句首,
”
e、 g
12345=“第3节已准备好审查”
24680=“鲍勃回顾第4章”
我需要找到一种方法,在单词/短语/句子的开头插入额外的文本,但前提是它不是以几个关键词中的一个开头
附加文本:“完成:”
关键词列表:keywords\u List=[“部分”、“页面”、“标题”]
e、 g
12345=“第3节已准备好审核”
(无需更改-句子以列表中的“Section”开头)
24680=“Complete:Bob复习第4章”
(“Complete:”添加到句首,因为第一个单词不在列表中)
这可以通过大量的字符串拆分和
if
语句来实现,但regex似乎应该是一个更简洁、更整洁的解决方案。我有以下未考虑列表的内容:
对于行中的行:
line=re.sub(“(^\s\s[0-9]+\s=\s”)”,r“\1Complete:”,line)
我还有一些代码,可以识别需要更改的行:
print([w代表re.findall中的w('^\s\s[0-9]+\s=\s'([\w+=?\s?,?.?]+)”,如果w不在关键字列表中,则第行)])
regex是否是满足我需求的最佳选择?如果是,我缺少什么
输入示例:
12345=“第3节已准备好审查”
24680=“鲍勃回顾第4章”
示例输出:
12345=“第3节已准备好审查”
24680=“Complete:Bob查看第4章”
您可以使用类似的正则表达式
^\s{2}[0-9]+\s=\s“(?!(?:节|页|标题)\b)
看。详情:
-字符串的开头^
-两个空格\s{2}
-一个或多个数字[0-9]+
-两端带有一个空格的\s=\s
=
-a“
字符”
-如果当前位置右侧有(?!(?:Section | Page | Heading)\b)
、Section
或Page
整个单词,则会导致匹配失败的负面前瞻Heading
重新导入
text=[“12345=”第3节已准备好进行审查“,“24680=”鲍勃将审查第4章“]
添加='完成:'
关键词列表=[“部分”、“页面”、“标题”]
pattern=re.compile(fr'^\s{{{2}}[0-9]+\s=\s“(?!(?:{”|“.join(关键字列表)})\b)”
对于文本中的文本:
打印(pattern.sub(fr'\g{add}',text))
#=>12345=“第3节已准备好进行审查”
#24680=“完成:鲍勃复习第4章”
这真是太棒了。漂亮、简洁,比我现在拥有的要整洁得多。谢谢!