blob: 89a2f924b13b16d539c182d8e54cd2abf3724413 [file] [log] [blame]
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +00001# Copyright 2014 Google Inc.
2#
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6
Eric Borenbb0ef0a2014-06-25 11:13:27 -04007"""Miscellaneous utilities."""
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +00008
Eric Borenbb0ef0a2014-06-25 11:13:27 -04009
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000010import re
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000011
12
13class ReSearch(object):
borenet3da21d22014-06-25 08:40:58 -070014 """A collection of static methods for regexing things."""
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000015
borenet3da21d22014-06-25 08:40:58 -070016 @staticmethod
17 def search_within_stream(input_stream, pattern, default=None):
18 """Search for regular expression in a file-like object.
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000019
borenet3da21d22014-06-25 08:40:58 -070020 Opens a file for reading and searches line by line for a match to
21 the regex and returns the parenthesized group named return for the
22 first match. Does not search across newlines.
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000023
borenet3da21d22014-06-25 08:40:58 -070024 For example:
25 pattern = '^root(:[^:]*){4}:(?P<return>[^:]*)'
26 with open('/etc/passwd', 'r') as stream:
27 return search_within_file(stream, pattern)
28 should return root's home directory (/root on my system).
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000029
borenet3da21d22014-06-25 08:40:58 -070030 Args:
31 input_stream: file-like object to be read
32 pattern: (string) to be passed to re.compile
33 default: what to return if no match
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000034
borenet3da21d22014-06-25 08:40:58 -070035 Returns:
36 A string or whatever default is
37 """
38 pattern_object = re.compile(pattern)
39 for line in input_stream:
40 match = pattern_object.search(line)
41 if match:
42 return match.group('return')
43 return default
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000044
borenet3da21d22014-06-25 08:40:58 -070045 @staticmethod
46 def search_within_string(input_string, pattern, default=None):
47 """Search for regular expression in a string.
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000048
borenet3da21d22014-06-25 08:40:58 -070049 Args:
50 input_string: (string) to be searched
51 pattern: (string) to be passed to re.compile
52 default: what to return if no match
commit-bot@chromium.org0ed90022014-01-30 22:12:30 +000053
borenet3da21d22014-06-25 08:40:58 -070054 Returns:
55 A string or whatever default is
56 """
57 match = re.search(pattern, input_string)
58 return match.group('return') if match else default
59