簡體   English   中英

Python正則表達式匹配長度A或B?

[英]Python regex match on length A or B?

通常,在進行正則表達式時,您可以執行[regex] {n}來表示您希望正則表達式應用於n個字符。 或者,您可以執行{n,m}來表示n到m個字符。

那個人呢? 例如,如果我想做{4或8或12}?

交替將完成工作

A{4}|A{8}|A{12}

但是,如果A是一個很大的正則表達式,那么您將重復很多,這不好。 某些正則表達式引擎不允許定義子正則表達式並在以后重用。 我對此是否存在很感興趣,但是我使用的.NET在正則表達式中不支持它。

當然,從宿主語言中多次將字符串變量嵌入到正則表達式中並沒有什么障礙。

更新1

A{12}|A{8}|A{4} 

可以匹配不同於

A{4}|A{8}|A{12}

前者可以被標記為貪婪,而后者則是懶惰的。

后者將匹配AAAAAAAA中的前4個A,而前者將匹配8個A。

量詞的默認行為是貪婪,但是由於您不能使此手工構造的構造變得懶惰? 它僅取決於您在2之間進行選擇時的需求。如果將其嵌入到正則表達式中,則有時會出現懶惰行為。 不嵌入前者很有可能是您想要的。

{m, n}只是重復交替的簡寫。 也就是說, A{4,5}只是AAAA|AAAAA縮寫。 正如凱文(Kevin)在評論中指出的那樣,您可以將任意長度表示為連續的一系列范圍,但總的來說是不可能的。 例如,任何有限的素數集(以一元表示法)都可以由正則表達式匹配:

11|111|11111|1111111|11111111111   # Your hypothetical 1{2 or 3 or 5 or 7 or 11}

暫無
暫無

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

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