簡體   English   中英

Python正則表達式積極向前看

[英]Python regex positive look ahead

我有以下正則表達式,應該找到以標點符號結束的單詞序列。 前瞻功能確保在比賽后有空格和大寫字母或數字。

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.)

進一步學習。

I have multiple blanks, the \w.+? continues to match the blanks until the last blank before the capital letter

要回答此評論,請考慮:

什么\\ w。+? 實際匹配?

單個字符[a-zA-Z0-9_]后跟至少一個“任意”字符(換行符除外),但是使用惰性量詞+ ?. 因此,在您的情況下,它會留下一個空格,以便以后的前瞻匹配。 因此,除了一個空白之外,您將消耗所有空白。 這就是你在輸出中看到它們的原因。

我不確定你要在這里實現什么。

以標點符號結束的單詞序列可以與以下內容匹配:

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

前瞻需要另一個字符串?

在任何情況下:

  • \\ s需要一個且只有一個空間;
  • \\ s + 至少需要一個空格。

是的,即使在python 2.x中,前瞻也接受“+”修飾符

與以前一樣,但有一個前瞻:

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

要么

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

你可以試試這些:

s='Stefano ciao.   a domani. a presto;'

根據您的字符串,可能需要或不需要前瞻,並且可能會或可能不會更改為具有“+”多個空格選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM