1. 创建Regex对象的函数是什么?
答:re.compile()函数返回Regex对象。
2. 在创建Regex对象时,为什么常用原始字符串?
答:使用原始字符串是为了让反斜杠不必转义。
3. search()方法返回什么?
答:search()方法返回Match对象。
4. 通过Match对象,如何得到匹配该模式的实际字符串?
答:group()方法返回匹配文本的字符串。
5. 用 r'(\d\d\d)-(\d\d\d - \d\d\d\d)' 创建的正则表达式中,分组0表示什么?分组1呢?分组2呢?
答:分组0表示整个匹配,分组1包含第一组括号,分组2包含第二组括号。
6. 括号和句点在正则表达式语法中有特殊的含义。如何制定正则表达式匹配真正的括号和句点字符?
答:句号和括号可以用反斜杠转义:\.、\(和\)。
7. findall()方法返回一个字符串的列表,或字符串元组的列表。是什么决定它提供哪种返回?
答:如果正则表达式没有分组,就返回字符串的列表。如果正则表达式有分组,就返回字符串元组的列表。
8. 在正则表达式中,|字符表示什么意思?
答:|表示匹配2组中的"任何一个"。
9. 在正则表达式中,?字符表示什么意思?
答:?字符可以表示"匹配前面分组0次或1次",或用于表示非贪婪匹配。
10. 在正则表达式中,+和*字符之间的区别是什么?
答:+匹配1次或多次。*匹配0次或多次。
11. 在正则表达式中,{3}和{3,5}之间的区别是什么?
答:{3}精确匹配前面分组的3次实例。{3,5}匹配3至5次实例。
12. 在正则表达式中,\d、\w和\s缩写字符类是什么意思?
答:数字、单词和空白字符。
13. 在正则表达式中,\D、\W和\S缩写字符类是什么意思?
答:分别匹配一个字符,它不是数字、单词或空白字符。
14. 如何让正则表达式不区别大小写?
答:将re.I 或者 re.IGNORECASE作为第二个参数传入re.compile(),让匹配不区分大小写。
15. 字符.通常匹配什么?如果 re.DOTALL作为第二个参数传递给re.compile(),它会匹配什么?
答:字符.通常匹配任何字符,换行符除外。
16. .*和.*?之间的区别是什么?
答:.*表示贪婪匹配,.*?表示非贪婪匹配。
17. 匹配所有数字和小写字母的字符分类语法是什么?
答:[0-9a-z]或[a-z0-9]
18. 如果 numRegex = re.compile(r'\d+'),那么numRegex.sub('X','12 drummers,11pipers,five rings,3hens')返回什么?
答:'X drummers,X pipers,five rings,X hens'
19. 将re.VERBOSE 作为第二个参数传递给re.compile(),让你能做什么?
答:添加空格和注释
20. 如何写一个正则表达式,匹配每3位就有一个逗号的数字?它必须匹配以下数字:
● '42'
● '1,234'
● '6,368,745'
但不会匹配:
● '12,34,567'(逗号之间只能有两位数字)
● '1234'(缺少逗号)
答:re.compile(r'^\d{1,3}(,{3})*$')
21. 如何写一个正则表达式,匹配姓名Makamoto的完整姓名?你可以假定名字总是出现在姓前面,是一个大写字母开头的单词。
该正则表达式必须匹配:
● 'Satoshi Nakamoto'
● 'Alice Nakamoto'
● 'RoboCop Nakamoto'
但不匹配:
● 'satoshi Nakamoto'
● 'Mr.Nakamoto'
● 'Nakamoto'
● 'Satoshi nakamoto'
答:re.compile(r'[A-Z][a-z]*\sNakamoto')
22. 如何编写一个正则表达式匹配一个句子,他的第一个词是Alice、Bob或Carol,第二个词是eats、pets或throws,第三词是apples、cats或baseablls.该句子以句点结束。这个正则表达式不区分大小写。它必须匹配:
● 'Alice eats apples'
● 'Bob pets cats'
● 'Carol throws baseballs'
● 'Alice throws Apples'
● 'BOB EATS CATS'
但不匹配:
● 'RoboCop eats apples'
● 'ALICE THROWS FOOTABLLS'
● 'carol eats 7 cats'
答:re.compile(r'(Alice|Bob|Carol)\s(eats|pets|throws)\s(apples|cats|baseablls)\.,re.IGNOREACSE')