繁体   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