Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用正则表达式搜索并避免列表中的条目?_Python_Regex - Fatal编程技术网

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章”

这真是太棒了。漂亮、简洁,比我现在拥有的要整洁得多。谢谢!