Python 正则表达式分组
被括号括起来的表达式将作为一个整体,也就是一个分组:
In [43]: str = "Jan 26 16:41:27 localhost dhclient[1480]: bound to 192.168.119.128 -- renewal in 750 seconds." In [44]: reg = re.compile(r'(\w+ \d+ [\d:]+) (\w+) .*') # 把日期和时间匹配到一组,把来源主机匹配到一组 In [45]: reg.findall(str) # 另外,虽然.*匹配到剩下的所有内容,但默认只打印匹配到的分组的内容 Out[45]: [('Jan 26 16:41:27', 'localhost')]
我们可以给分组起一个名字,这种分组叫做有名分组:
In [52]: str = "Jan 26 16:41:27 localhost dhclient[1480]: bound to 192.168.119.128 -- renewal in 750 seconds." In [53]: reg = re.compile(r'(?P<datetime>\w+ \d+ [\d:]+) (?P<hostname>\w+) .*') # 有名分组的语法:(?P<group_name>pattern) In [54]: result = reg.search(str) # 需要用search()方法来进行匹配,因为该方法有group()可以指定打印哪个匹配到的分组 In [55]: result.group('datetime') # 根据组名来获取匹配到的分组的内容 Out[55]: 'Jan 26 16:41:27' In [56]: result.group('hostname') Out[56]: 'localhost' In [57]: result.groupdict() # 还可以用groupdict()以字典的形式返回所有分组 Out[57]: {'datetime': 'Jan 26 16:41:27', 'hostname': 'localhost'}