如果一个单词在python中的给定字符出现次数超过2次,如何删除该单词?

如果一个单词在python中的给定字符出现次数超过2次,如何删除该单词?,python,regex,parsing,Python,Regex,Parsing,我正在分析一个日志文件,其中包含以下行: Pushing the logs into /var/log/my_log.txt Pushing the logs into /opt/test/log_file.txt 具有自动生成路径(/…/…/…/…)的这些行多次出现 我想将其更改为一般形式,如: Pushing the logs into PATH 我尝试使用正则表达式选择一个带有多个正斜杠的单词,然后将其替换为单词“PATH”,如下所示: line = re.sub(r'\b([\/A

我正在分析一个日志文件,其中包含以下行:

Pushing the logs into /var/log/my_log.txt
Pushing the logs into /opt/test/log_file.txt
具有自动生成路径(/…/…/…/…)的这些行多次出现

我想将其更改为一般形式,如:

 Pushing the logs into PATH
我尝试使用正则表达式选择一个带有多个正斜杠的单词,然后将其替换为单词“PATH”,如下所示:

line = re.sub(r'\b([\/A-Z]*\/[A-Z]*){1,}\b',' PATH ',line)

只有前斜杠被替换,而不是整个单词

这个概念非常新。我做错什么了吗?感谢所有的帮助。谢谢。

您可以使用:

import re

line = 'Pushing the logs into /var/log/my_log.txt'

pat = r'(?<!\S)(/\S+){2,}'

line = re.sub(pat, 'PATH', line)

print(line)
重新导入
行='将日志推送到/var/log/my_log.txt'
pat=r'(如果前面至少有两个,则不包括结尾处的
/
)。如果您只想查找例如3个或更多的
/
(不在末尾),则将2更改为3,但如果这样做,您将错过
/tmp/my_log.txt

regexp
(?)的第一位是一个否定的lookbehind断言,意思是“前面没有非空白字符”,即它将在“单词”的开头或行的开头匹配。下一位
(/\S+
表示一个
/
,后跟一个或多个非空白字符(这可能包括
/
——这没关系,所以我没有费心排除这些)。而
{2,}
意味着应该有两个或更多个


(我在这里用“word”来表示非空白字符序列,不一定是字母。)

只有正斜杠匹配,因为字符串是小写的,并且模式使用
[\/a-Z]*

您可以使用
re.IGNORECASE
使模式不区分大小写,但它与示例数据中的下划线和点不匹配

当您使用单词边界开始模式时,第一个正斜杠不会匹配,但是空格和第一个正斜杠之间没有单词边界

更具体的匹配可以使用
\w
匹配单词字符并指定扩展名的点:

(?<!\S)(?:/\w+)+/\w+\.\w+(?!\S)
输出

Pushing the logs into PATH

更广泛的模式可以匹配正斜杠的2倍,并使用否定字符类来匹配除正斜杠或换行符以外的任何字符

(?<!\S)(?:/[^/\r\n]+){2,}
(?
请参阅另一个

try,
re.sub(“/.*”,“路径”,行)
(?<!\S)(?:/[^/\r\n]+){2,}