Python正则表达式匹配长度A或B?

时间:2015-08-17 14:18:09

标签: python regex

通常在执行正则表达式时,您可以执行[regex] {n}以指示您希望正则表达式应用于n个字符。或者你可以{n,m}表示n到m个字符。

个别情况怎么样?例如,如果我想做{4或8或12}?

2 个答案:

答案 0 :(得分:2)

轮候将完成工作

<RichTextBox x:Name="CurrentBody" DataContextChanged="Differences_OnDataContextChanged" DataContext="{Binding CurrentDifferences}" IsReadOnly="True" IsReadOnlyCaretVisible="True" />

但如果A是一个很大的正则表达式,那么你将会复制很多不好的东西。不要使用一些正则表达式引擎来定义子正则表达式,然后重用它。我对这是否存在感兴趣,但我使用的.NET在正则表达式中不支持它。

当然,通过在正则表达式中从宿主语言中嵌入一些字符串变量,没有任何阻碍。

更新1

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

可以匹配不同于

的内容
A{12}|A{8}|A{4} 

前一个可以被标记为贪婪,而后一个可以被标记为懒惰。

后者将匹配AAAAAAAA中的前4个A,而前者将匹配8个A&#39。

量词的默认行为是贪婪的,但是因为你不能使这个手工制作的构造变得懒惰?它只取决于你在2中选择时需要什么。如果你将它嵌入正则表达式中,你有时会想要懒惰的行为。 没有嵌入前者很可能是你想要的。

答案 1 :(得分:0)

{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}