字符串模式匹配家庭作业帮助
该模块提供与Perl中类似的正则表达式匹配操作。要搜索的模式和字符串都可以是Unicode字符串以及8位字符串。
正则表达式使用反斜杠字符(’\’)来表示特殊形式,或允许使用特殊字符而不调用其特殊含义。这与Python在字符串文字中的相同目的的使用相同;例如,要匹配文字反斜杠,可能必须将“\\\”作为模式字符串,因为正则表达式必须为\\,每个反斜杠必须在常规Python字符串文字中表示为\\。
解决方案是使用Python的原始字符串符号进行正则表达式模式;在以“r”为前缀的字符串文字中,反斜杠不以任何特殊的方式处理。所以r“\ n”是包含’\’和’n’的两个字符的字符串,而“\ n”是包含换行符的单字符字符串。通常使用原始字符串符号表示Python代码中的模式。
重要的是要注意,大多数正则表达式操作可用作模块级函数和RegexObject方法。这些功能是不需要您首先编译正则表达式对象的快捷方式,但错过了一些微调参数。
也可以看看
第三方正则表达式模块具有与标准库重新配置相兼容的API,但提供了额外的功能和更彻底的Unicode支持。
7.2.1。正则表达式语法
正则表达式(或RE)指定一组与之匹配的字符串;此模块中的函数允许您检查特定字符串是否匹配给定的正则表达式(或者如果给定的正则表达式匹配特定的字符串,这归结为相同的事物)。
正则表达式可以连接形成新的正则表达式;如果A和B都是正则表达式,那么AB也是一个正则表达式。一般来说,如果字符串p匹配A,而另一个字符串q匹配B,则字符串pq将匹配AB。除非A或B包含低优先级操作A和B之间的边界条件;或具有编号组参考。因此,复杂的表达式可以很容易地从简单的原始表达式构造,如这里描述的。有关正则表达式的理论和实现的细节,请参阅上面引用的Friedl书,或几乎任何有关编译器构建的教科书。
以下是正则表达式的简要说明。有关更多信息和更温和的演示文稿,请参阅正则表达式HOWTO。
正则表达式可以包含特殊和普通字符。大多数普通字符,如“A”,“a”或“0”是最简单的正则表达式;他们只是匹配自己。你可以连接普通字符,所以最后匹配字符串’last’。 (在本节的其余部分,我们将以这种特殊风格(通常没有引号)和字符串以“单引号”匹配来写入RE。)
一些字符,如“|”或’(’)是特殊的,特殊字符代表普通字符类,或影响其周围的正则表达式的解释方式正则表达式模式字符串可能不包含空字节,但可以使用\ number表示法指定空字节,例如’\ x00’。
重复限定符(*,+,?,{m,n}等)不能直接嵌套。这样可以避免使用非贪婪修饰符后缀的歧义,以及其他实现中的其他修饰符。要将第二个重复应用于内部重复,可以使用括号。例如,表达式(?:a {6})*匹配六个’a’字符的任意多个。
特殊字符是:
”’(Dot。)在默认模式下,它匹配除换行之外的任何字符。如果DOTALL标志已经被指定,它将匹配任何包含换行符的字符。
‘^’
(插入符号)匹配字符串的开始,并且在每个换行符之后,MULTILINE模式也会立即匹配。
‘$’
匹配字符串的末尾或刚刚在字符串末尾的换行符之前,并且MULTILINEmode也在换行符之前匹配。 foo匹配’foo’和’foobar’,而正则表达式foo $只匹配’foo’。更有趣的是,在’foo1 \ nfoo2 \ n’中正常匹配foo2,而在MULTILINE模式下匹配’foo1’在“foo \ n”中搜索单个$将会找到两个(空)匹配:一个在换行符之前,一个在字符串的末尾。
‘*’
导致结果RE匹配前面RE中的0或更多次重复,尽可能多的重复。 ab *将匹配’a’,’ab’或’a’,后跟任意数量的’b’。
‘+’
导致产生的RE匹配前面RE中的一个或多个重复。 ab +将匹配’a’,后跟非零数字’b’;它不会匹配“a”。
‘?’
导致产生的RE匹配前面RE中的0或1次重复。 ab?将匹配“a”或“ab”。
*?+?
‘*’,’+’和’?’限定词都是贪心的他们匹配尽可能多的文本。有时这种行为是不需要的;如果RE <。*>与<a> b <c>匹配,则它将匹配整个字符串,而不仅仅是<a>。添加?在限定词使它以非贪婪或最小的方式进行比赛;尽可能少的字符将被匹配。使用RE <。*?>将只匹配<a>。
{m}
指定前一个RE的正好m个副本应该匹配;较少的比赛导致整个RE不匹配。例如,{6}将匹配六个’a’字符,但不匹配五个。
{m,n}
导致产生的RE从前面的RE的m到n个重复匹配,尝试匹配尽可能多的重复。例如,{3,5}将匹配3到5个’a’字符。省略m指定下限为零,省略n指定无限上限。例如,一个{4,} b将匹配aaaab或一个’a’字符,后跟一个b,而不是aaab。逗号可能不会被省略,或修饰符将与先前描述的形式混淆。
{m,n}?
导致产生的RE匹配从上一个RE的m到n个重复,尝试匹配尽可能少的重复。这是前一个限定词的非贪心版本。例如,在6个字符的字符串’aaaaaa’上,{3,5}将匹配5’a’个字符,而{3,5}?将只匹配3个字符。
”’逃避特殊字符(允许您匹配“*”,“?”等字符),或者发出特殊序列;下面讨论特殊的序列。
如果您没有使用原始字符串来表达模式,请记住,Python还会在字符串文字中使用反斜杠作为转义序列;如果Python解析器无法识别转义序列,则反斜杠和后续字符将包含在生成的字符串中。但是,如果Python会识别生成的序列,反斜杠应该重复两次。这很复杂,难以理解,因此强烈建议您使用原始字符串,除了最简单的表达式。
我们在homeworkchina为Python或Python字符串模式匹配功课提供专家帮助。我们的导师是为各级学生提供家庭作业帮助的专家。