为什么你必须提到正则表达式中的开始和结束字符?

时间:2017-06-16 01:26:02

标签: python regex regex-negation

问题是一个不包含字母PART的正则表达式。这是一个答案: / ^((?PART)。)* $ /

问题链接:How to match a line not containing a word

我的问题是,除非你指明开始(^)和结束($),为什么它不起作用? 为什么不只是((?!PART)。)*工作?

2 个答案:

答案 0 :(得分:0)

模式

/^((?!PART).)*$/

匹配一般模式^.*$,即开始和结束锚点之间发生的任何事情。但是,它还包含否定的断言 (?!PART)。如上所述,您的模式断言,在字符串中的每个位置,当向前看四个字符时,字符串PART不会出现。

如果你只是使用这种模式:

/((?!PART).)*/

然后它只表示PART不会出现在字符串中的任何特定点。但是作为this demo showsPART hello world之类的字符串会匹配此替代模式,可能不是您想要的。

答案 1 :(得分:0)

因为" line"没有"多线"国旗re.M。此外,如果您只匹配包含PART的行的部分,那么您的所有匹配也将是字符串" PART"或者在上面的例子中" PART" +整个剩余行(取决于标志)。

^ =行首 $ =行尾 re.S = DOTALL,一个点包括空格/行尾标记 re.M = MULTILINE不将lineendings视为匹配结尾

如果没有明确说明,你只会进行子串匹配并完全忽略行结尾。