Regex 两种正则表达式模式之间的不同行为

Regex 两种正则表达式模式之间的不同行为,regex,python-3.x,Regex,Python 3.x,我正在尝试匹配文件中出现的字母“C”或“C” 它们必须是独立的,后面不能跟“+”或“.” 以下两种模式使用Regex101得到相同的结果,但得到的结果不同 在Dataquest IDE和我的家用电脑中 这两种模式是: pattern = r'\b[Cc]\b(?!\+|\.)' pattern = r"\b[Cc]\b[^.+]" 问题行是:(hacker_news.csv文件中的第223行) 在我的家用电脑和数据任务IDE上: 使用负前瞻的正则表达式与该行匹配。 另一个正则表达式没有 在

我正在尝试匹配文件中出现的字母“C”或“C”

它们必须是独立的,后面不能跟“+”或“.”

以下两种模式使用Regex101得到相同的结果,但得到的结果不同 在Dataquest IDE和我的家用电脑中

这两种模式是:

pattern = r'\b[Cc]\b(?!\+|\.)'  
pattern = r"\b[Cc]\b[^.+]"
问题行是:(hacker_news.csv文件中的第223行)

在我的家用电脑和数据任务IDE上: 使用负前瞻的正则表达式与该行匹配。 另一个正则表达式没有

在Regex101上,它们都匹配该行

我不应该和它相配

我编写了lookahead正则表达式,它在数据任务IDE中失败。 非前瞻性版本是他们的答案,它通过了

我认为它们应该产生相同的结果,但事实并非如此

我正在运行Python 3.7.6

我缺少什么?

(?!\+\124;\)
是消极的前瞻。它在匹配中不包含任何附加字符;它只是在前面的字符中添加一个要求,表示后面不能跟
+
。在输入字符串中,末尾的
C
后面没有这些字符,因此匹配成功


[^.+]
匹配的单个字符不是
+
C
后面没有字符,因此匹配失败。

\b[Cc]\b[^.+]
在regex101上也不匹配。在上次
C
之后,可能会出现换行。看这个:我不明白为什么这会影响行为。您能详细说明一下吗?在regex101中,如果在最后一个
C
之后有换行符,则
[^.+]
将匹配该换行符。在代码中,虽然没有换行符,但匹配失败。[^.+]与该行不匹配,这是正确的。为什么lookahead正则表达式与之匹配?我不相信它们是相等的<代码>(?!\+\\)翻译为“不是加号或不是句点”,因此只需匹配一个条件。因为句号不是加号,所以它通过了第一个条件。而
[^.+]
翻译成“不是句号,也不是加号”。要使前者与后者等效,我相信您需要
(?![.+])
如果可以,我需要如何修改lookahead正则表达式以匹配另一个正则表达式的行为?尾随的“C”后面没有任何内容。我想你可以在它的末尾添加一个
,这样它就可以匹配一个额外的字符,比如
\b[Cc]\b(?!\+\124;\)
。为什么不直接使用已经有效的模式呢?我已经在使用这个模式了。它匹配,但我不想匹配。为了回答你的问题,我只是想准确地理解发生了什么。对不起,我是想写
\b[Cc]\b(?!\+\124;\)。
(末尾有一个点)。此外,由于您只选择了一个字符,因此应该只使用字符类而不是交替:
\b[Cc]\b(?![+.])。
您的第一个新模式,
\b[Cc]\b(?!\+\124\)。
复制非前瞻性正则表达式的行为。这就是我要找的。
MemSQL (YC W11) Raises $36M Series C