forked from asayler/CU-CSCI3308-PythonUnitTesting
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtextproc.py
124 lines (80 loc) · 2.13 KB
/
textproc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# -*- coding: utf-8 -*-
# Andy Sayler
# Summer 2014
# CSCI 3308
# University of Colorado
# Text Processing Module
"""
A simple module with various Text Processing Capabilities
"""
# Imports
import re
# Exceptions
class TextProcError(Exception):
"""
Base Class for TextProc Exceptions
"""
def __init__(self, msg):
"""
TextProcError Constructor
:param msg: error message
:return: TextProcError instance
"""
super().__init__(msg)
# Public Classes
class Processor:
"""
Class for Processing Strings
"""
def __init__(self, text):
"""
Test Processor Constructor
:param str text: text string to process
:return: Processor instance
"""
if type(text) is not str:
raise TextProcError("Processors require strings")
self.text = text
def __len__(self):
"""
Length of text
:return: Length
"""
return len(self.text)
def count(self):
"""
Count number of characters in text
:return: Length
"""
return len(self)
def count_alpha(self):
"""
Count number of alphabetic characters in text
:return: Number of alphabetic characters
"""
alpha = re.compile(r'[a-z]')
return len(alpha.findall(self.text))
def count_numeric(self):
"""
Count number of numeric characters in text
:return: Number of numeric characters
"""
alpha = re.compile(r'[1-9]')
return len(alpha.findall(self.text))
def count_vowels(self):
"""
Count number of vowels in text
:return: Number of vowels
"""
vowels = re.compile(r'[aeou]', re.IGNORECASE)
return len(vowels.findall(self.text))
def is_phonenumber(self):
"""
Check if text is a valid US phone number
:return: True or False
"""
phonenum = re.compile(r'^[1-9]{3}([\-.])*[1-9]{3}\1*[1-9]{3}$')
if phonenum.match(self.text) is None:
return False
else:
return True