如何在python中使用AND和NOT结合word解决正则表达式

2024-10-01 19:34:15 发布

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

我有下面几行

https://regex101.com/r/uHCT7x/1

/var/log/data/folder1/apache/data/log

/var/log/data/folder4.data/jdk/data/log

我试过:

(/var/log/data)*(apache)
(/var/log/data)(?<!apache)(jdk/data/log)

这里,/var/log/data/data/log是整个文件中的固定数据。 我想比赛,就像

首先,如果与/var/log/data匹配和与apache匹配,则这两个值必须相同

其次,如果与/var/log/data匹配,而不是在apache中,并且以jdk/data/log匹配结束,则有效

要使用此数据进行分离&;两个不同的正则表达式来识别它


Tags: 文件数据httpscomlogdatavarapache
2条回答

First, Valid if match with /var/log/data AND match with apache

使用以下简单的正则表达式:

^/var/log/data/.*/apache\b

RegEx Demo 1

此正则表达式匹配以/var/log/data/开头的行,并在开始处匹配/var/log/data/之后的任何位置匹配apache


Second, Valid if match with /var/log/data, NOT in apache and End with jdk/data/log

使用此正则表达式:

^/var/log/data/(?!.*/apache\b).*/jdk/data/log$
  • 此正则表达式匹配以/var/log/data/开头并以/jdk/data/log结尾的行
  • ^如果/apache单词出现在匹配开始模式之后的任何位置,则{}是一个否定的前瞻,将导致匹配失败

RegEx Demo 2

如果您只是想匹配start:middle:end,您可以让它非常简单

string = '''/var/log/data/folder1/apache/data/log
/var/log/data/folder4.data/jdk/data/log
/var/log/data/folder55/apache/data/log
/var/log/data/foler/jdk/data/log'''

阿帕奇

re.findall(r'/var/log/data/.*?/apache.*', string)
#['/var/log/data/folder1/apache/data/log', '/var/log/data/folder55/apache/data/log']

非Apache

re.findall(r'/var/log/data/(?!.*apache).*?/jdk/data/log', string)
#['/var/log/data/folder4.data/jdk/data/log', '/var/log/data/foler/jdk/data/log']

相关问题 更多 >

    热门问题