Python正则表达式正向前瞻

Python正则表达式正向前瞻,python,regex,Python,Regex,我有下面的正则表达式,用来查找以标点符号结尾的单词序列。前瞻功能确保匹配后有空格和大写字母或数字 pat1 = re.compile(r"\w.+?[?.!](?=\s[A-Z\d])" 以下前瞻功能是什么 pat2 = re.compile(r"\w.+?[?.!](?=\s+[A-Z\d])" Python 3.2是否支持变量前瞻(\s+)?我没有得到任何错误。此外,我看不出这两种模式有什么不同。无论我有多少空格,这两种方法似乎都是一样的。是否有解释说明\s+在前瞻中的用途?不同之处在于

我有下面的正则表达式,用来查找以标点符号结尾的单词序列。前瞻功能确保匹配后有空格和大写字母或数字

pat1 = re.compile(r"\w.+?[?.!](?=\s[A-Z\d])"
以下前瞻功能是什么

pat2 = re.compile(r"\w.+?[?.!](?=\s+[A-Z\d])"

Python 3.2是否支持变量前瞻(\s+)?我没有得到任何错误。此外,我看不出这两种模式有什么不同。无论我有多少空格,这两种方法似乎都是一样的。是否有解释说明\s+在前瞻中的用途?

不同之处在于,第一个前瞻希望在数字或大写字母之前有一个空白字符,而第二个前瞻希望至少有一个空白字符,但尽可能多

+被称为量词。它意味着尽可能多的1到n

重述

\s (Exactly one whitespace character allowed. Will fail without it or with more than one.)
\s+ (At least one but maybe more whitespaces allowed.)

为回答此评论,请考虑:

什么是\w.+?真的匹配吗


一个单字字符[A-zA-Z0-9_],后跟至少一个“any”字符(新行除外),但带有惰性量词+?。因此,在您的情况下,它会留下一个空间,以便以后的前瞻匹配。因此,除一个空格外,您将使用所有空格。这就是为什么你会在你的输出中看到它们。

我真的不确定你在这里想要实现什么

以标点符号结尾的单词序列可以与以下内容匹配:

re.findall(r'([\w\s]*[\?\!\.;])', s)
s='Stefano ciao.   a domani. a presto;'
向前看需要另一个字符串跟随吗

无论如何:

  • \s只需要一个空间
  • \s+至少需要一个空间
是的,即使在Python2.x中,lookahead也接受“+”修饰符

与之前相同,但具有前瞻性:

re.findall(r'([\w\s]*[\?\!\.;])(?=\s\w)', s)

您可以在以下内容上尝试所有这些功能:

re.findall(r'([\w\s]*[\?\!\.;])', s)
s='Stefano ciao.   a domani. a presto;'

根据字符串的不同,前瞻可能是必要的,也可能不是,也可能不会更改为具有“+”多个空格选项

对不起,我的问题搞砸了。你们仍然错过了最后一轮的比赛!您应该发布一些您希望使用的字符串示例,以及如何使用re-moduleThanks FailedDev搜索/匹配/查找它们。当我只使用\s运行正则表达式,并且有多个空格时,\w.+?继续匹配空格,直到大写字母前的最后一个空格。在我的结果中,我得到了一个带有空格的文本,比如:“汽车停在——”,“在车库里”(-表示空格)。如果我在“向前看”中有\s+,则不会捕获多余的空格,我会得到“汽车已停放”、“在车库中”。不管单词之间有多少空格。Python3支持变量前瞻是正确的吗?