簡體   English   中英

無法從python正則表達式中的lookbehind中獲得所需的結果

[英]Not able to get desired result from lookbehind in python regex

我正在嘗試找到一種模式,可以讓我找到四位數的年份。 但是,我不想獲得年份以月份開頭的結果,例如“ This is Jan 2009”不應給出任何結果,但是“ This is 2009”應該返回2009。 “ 2009年”,而不是空白。 我想念什么? 怎么做?

不匹配任何其他匹配的字符串,其后跟匹配負向后查找的字符串。

在您當前的正則表達式中, [az]* \\d{4}匹配"an 2009"

'(?<!Jan|Feb)'后面的負數與"This is J"部分不匹配,因此不會被觸發。

如果從正則表達式中刪除'[az]*' ,則測試字符串將不返回任何匹配項。

要解決此類問題:

首先,寫下您想要的匹配\\d{4}

然后,寫下您不想要的內容(?<!Jan |Feb )

那就是(?<!Jan |Feb )\\d{4}

您可能要嘗試以下操作:

(?i)(?<!jan | feb)(?<!uary)\\ s + [0-9] * [0-9]

希望能幫助到你。

此通用示例應適用於您在上面的問題中提到的情況(已編輯以說明完整的月份名稱):

輸入:

'This is 2009'
'This is Jan 2009'

正則表達式:

re.findall(r'(?:\b[^A-Z][a-z]+\s)(\d{4})', text))

輸出:

['2009']
[]

說明:

?:表示非捕獲組,因此不會包含在輸出中

\\ b斷言單詞邊界

^ [AZ]斷言該單詞不是以大寫字母開頭

[az] +斷言其后是一個或多個小寫字母

\\ s表示任何空格字符

(\\ d {4})斷言四次出現的數字(\\ d)的捕獲組{4}

暫無
暫無

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

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