排除正则表达式匹配的最后一个字符

2024-04-25 20:41:15 发布

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

我有以下正则表达式:

%(?:\\.|[^%\\ ])*%([,;\\\s]) 

这很好,但显然它也会突出显示最后一个%的下一个字符。

我在想我怎么能把它排除在regex之外呢?

例如,如果我有:

The files under users\%username%\desktop\ are:

它将突出显示%username%\,但我只想要%username%。另一方面,如果我像这样离开regex:

%(?:\\.|[^%\\ ])*%

…然后它将匹配这个模式,我不想:

%example1%example2%example3

知道如何通过正则表达式排除匹配中的最后一个字符吗?


Tags: the模式files字符usersareregexdesktop
2条回答

您可以使用比当前使用的更有效的regex。当交替与量词一起使用时,会涉及不必要的回溯。

如果你的琴弦很短,可以用。但是,如果它们可以更长一些,则可能需要“展开”表达式。

这是如何做到的:

%[^"\\%]*(?:\\.[^"\\%]*)*%

正则表达式分解:

  • %-初始百分比符号
  • [^"\\%]*-展开模式的开始:除双引号、反斜杠和百分比符号外,0个或多个字符
  • (?:\\.[^"\\%]*)*-0或更多。。。
    • \\.-后跟换行符以外的任何字符的文本反斜杠
    • [^"\\%]*-除双引号、反斜杠和百分号以外的0个或更多字符
  • %-尾随百分号

使用^{}查看this demo-6个步骤与30个步骤。

%(?:\\.|[^%\\ ])*%(?=[,;\\\s])

                   ^^

使用lookahead。这里需要的是不捕获任何内容的0 width assertion

相关问题 更多 >