Mastering Python Regular Expressions
|
|
|
- Shannon Hines
- 9 years ago
- Views:
Transcription
1 Mastering Python Regular Expressions Félix López Víctor Romero Chapter No. 3 "Grouping"
2 In this package, you will find: A Biography of the authors of the book A preview chapter from the book, Chapter NO.3 "Grouping" A synopsis of the book s content Information on where to buy this book About the Authors Félix López started his career in web development before moving to software in the currency exchange market, where there were a lot of new security challenges. Later, he spent four years creating an IDE to develop games for hundreds of different mobile device OS variations, in addition to creating more than 50 games. Before joining ShuttleCloud, he spent two years working on applications with sensor networks, Arduino, ZigBee, and custom hardware. One example is an application that detects the need for streetlight utilities in major cities based on existing atmospheric brightness. His first experience with Python was seven years ago, He used it for small scripts, web scrapping, and so on. Since then, he has used Python for almost all his projects: websites, standalone applications, and so on. Nowadays, he uses Python along with RabbitMQ in order to integrate services. He's currently working for ShuttleCloud, an U.S.-based startup, whose technology is used by institutions such as Stanford and Harvard, and companies such as Google. I would like to for helping me with some parts of the book and especially my family for supporting me, despite the fact that I spend most of my time with my work ;)
3 Víctor Romero currently works as a solutions architect at MuleSoft, Inc. He started his career in the dotcom era and has been a regular contributor to open source software ever since. Originally from the sunny city of Malaga, Spain, his international achievements include integrating the applications present in the cloud storage of a skyscraper in New York City, and creating networks for the Italian government in Rome. I would like to thank my mom for instilling the love of knowledge in me, my grandmother for teaching me the value of hard work, and the rest of my family for being such an inspiration. I would also like to thank my friends and colleagues for their unconditional support during the creation of this book.
4 Mastering Python Regular Expressions Text processing has been one of the most relevant topics since computer science took its very first baby steps. After a few decades of investigation, we now have one of the most versatile and pervasive tools that exist: regular expressions. Validation, search, extraction, and replacement of text are operations that have been simplified thanks to Regular Expressions. This book will initially cover regular expressions from a bird's-eye view, proceeding step-by-step to more advanced topics such as regular expression specifics on Python or grouping, workaround, and performance. All the topics will be covered with Pythonspecific examples that can be used straightaway in the Python console. What This Book Covers Chapter 1, Introducing Regular Expressions, will introduce the basics of the regular expression syntax from a non-python-specific point of view. Chapter 2, Regular Expressions with Python, will cover the Python's API for regular expressions and its quirks from a Python-specific point of view. Chapter 3, Grouping, covers the regular expression functionality to extract portions of information, apply quantifiers to specific parts, and perform correct alternation. Chapter 4, Look Around, explains the concept of zero-width assertions and the different types of look-around mechanisms. Chapter 5, Performance of Regular Expressions, will cover different tools to measure the speed of a regular expression, the details of the regular expression module of Python, and different recommendations to improve the performance of regular expressions.
5 Grouping Grouping is a powerful tool that allows you to perform operations such as: Creating subexpressions to apply quantifiers. For instance, repeating a subexpression rather than a single character. Limiting the scope of the alternation. Instead of alternating the whole expression, we can define exactly what has to be alternated. Extracting information from the matched pattern. For example, extracting a date from lists of orders. Using the extracted information again in the regex, which is probably the most useful property. One example would be to detect repeated words. Throughout this chapter, we will explore groups, from the simplest to the most complex ones. We'll review some of the previous examples in order to bring clarity to how these operations work. Introduction We've already used groups in several examples throughout Chapter 2, Regular Expressions with Python. Grouping is accomplished through two metacharacters, the parentheses (). The simplest example of the use of parentheses would be building a subexpression. For example, imagine you have a list of products, the ID for each product being made up of two or three sequences of one digit followed by a dash and followed by one alphanumeric character, 1-a2-b: >>>re.match(r"(\d-\w){2,3}", ur"1-a2-b") <_sre.sre_match at 0x10f690738> As you can see in the preceding example, the parentheses indicate to the regex engine that the pattern inside them has to be treated like a unit.
6 Grouping Let's see another example; in this case, we need to match whenever there is one or more ab followed by c: >>>re.search(r"(ab)+c", ur"ababc") <_sre.sre_match at 0x10f690a08> >>>re.search(r"(ab)+c", ur"abbc") None So, you could use parentheses whenever you want to group meaningful subpatterns inside the main pattern. Another simple example of their use is limiting the scope of alternation. For example, let's say we would like to write an expression to match if someone is from Spain. In Spanish, the country is spelled España and Spaniard is spelled Español. So, we want to match España and Español. The Spanish letter ñ can be confusing for non-spanish speakers, so in order to avoid confusion we'll use Espana and Espanol instead of España and Español. We can achieve it with the following alternation: >>>re.search("espana ol", "Espanol") <_sre.sre_match at 0x1043cfe68> >>>re.search("espana ol", "Espana") <_sre.sre_match at 0x1043cfed0> The problem is that this also matches ol: >>>re.search("espana ol", "ol") <_sre.sre_match at 0x1043cfe00> So, let's try character classes as in the following code: >>>re.search("espan[aol]", "Espanol") <_sre.sre_match at 0x1043cf1d0> >>>re.search("espan[aol]", "Espana") <_sre.sre_match at 0x1043cf850> It works, but here we have another problem: It also matches "Espano" and "Espanl" that doesn't mean anything in Spanish: >>>re.search("espan[a ol]", "Espano") <_sre.sre_match at 0x1043cfb28> [ 54 ]
7 Chapter 3 The solution here is to use parentheses: >>>re.search("espan(a ol)", "Espana") <_sre.sre_match at 0x10439b648> >>>re.search("espan(a ol)", "Espanol") <_sre.sre_match at 0x10439b918> >>>re.search("espan(a ol)", "Espan") None >>>re.search("espan(a ol)", "Espano") None >>>re.search("espan(a ol)", "ol") None Let's see another key feature of grouping, capturing. Groups also capture the matched pattern, so you can use them later in several operations, such as sub or in the regex itself. For example, imagine you have a list of products, the IDs of which are made up of digits representing the country of the product, a dash as a separator, and one or more alphanumeric characters as the ID in the DB. You're requested to extract the country codes: >>>pattern = re.compile(r"(\d+)-\w+") >>>it = pattern.finditer(r"1-a\n20-baer\n34-afcr") >>>match = it.next() >>>match.group(1) '1' >>>match = it.next() >>>match.group(1) '20' >>>match = it.next() >>>match.group(1) '34' In the preceding example, we've created a pattern to match the IDs, but we're only capturing a group made up of the country digits. Remember that when working with the group method, the index 0 returns the whole match, and the groups start at index 1. Capturing groups give a huge range of possibilities due to which they can also be used with several operations, which we would discuss in the upcoming sections. [ 55 ]
8 Grouping Backreferences As we've mentioned previously, one of the most powerful functionalities that grouping gives us is the possibility of using the captured group inside the regex or other operations. That's exactly what backreferences provide. Probably the best known example to bring some clarity is the regex to find duplicated words, as shown in the following code: >>>pattern = re.compile(r"(\w+) \1") >>>match = pattern.search(r"hello hello world") >>>match.groups() ('hello',) Here, we're capturing a group made up of one or more alphanumeric characters, after which the pattern tries to match a whitespace, and finally we have the \1 backreference. You can see it highlighted in the code, meaning that it must exactly match the same thing it matched as the first group. Backreferences can be used with the first 99 groups.obviously, with an increase in the number of groups, you will find the task of reading and maintaining the regex more complex. This is something that can be reduced with named groups; we'll see them in the following section. But before that, we still have a lot of things to learn with backreferences. So, let's continue with another operation in which backreferences really come in handy. Recall the previous example, in which we had a list of products. Now, let's try to change the order of the ID, so we have the ID in the DB, a dash, and the country code: >>>pattern = re.compile(r"(\d+)-(\w+)") >>>pattern.sub(r"\2-\1", "1-a\n20-baer\n34-afcr") 'a-1\nbaer-20\nafcr-34' That's it. Easy, isn't it? Note that we're also capturing the ID in the DB, so we can use it later. With the highlighted code, we're saying, "Replace what you've matched with the second group, a dash, and the first group". As with the previous example, using numbers can be difficult to follow and to maintain. So, let's see what Python, through the re module, offers to help with this. [ 56 ]
9 Named groups Remember from the previous chapter when we got a group through an index? >>>pattern = re.compile(r"(\w+) (\w+)") >>>match = pattern.search("hello world") >>>match.group(1) 'Hello' >>>match.group(2) 'world' We just learnt how to access the groups using indexes to extract information and to use it as backreferences. Using numbers to refer to groups can be tedious and confusing, and the worst thing is that it doesn't allow you to give meaning or context to the group. That's why we have named groups. Chapter 3 Imagine a regex in which you have several backreferences, let's say 10, and you find out that the third one is invalid, so you remove it from the regex. That means you have to change the index for every backreference starting from that one onwards. In order to solve this problem, in 1997, Guido Van Rossum designed named groups for Python 1.5. This feature was offered to Perl for cross-pollination. Nowadays, it can be found in almost any flavor. Basically it allows us to give names to the groups, so we can refer to them by their names in any operation where groups are involved. In order to use it, we have to use the syntax,(?p<name>pattern), where the P comes from Python-specific extensions (as you can read in the Guido sent to Perl developers at Let's see how it works with the previous example in the following code snippet: >>> pattern = re.compile(r"(?p<first>\w+) (?P<second>\w+)") >>> match = re.search("hello world") >>>match.group("first") 'Hello' >>>match.group("second") 'world' So, backreferences are now much simpler to use and maintain as is evident in the following example: >>>pattern = re.compile(r"(?p<country>\d+)-(?p<id>\w+)") >>>pattern.sub(r"\g<id>-\g<country>", "1-a\n20-baer\n34-afcr") 'a-1\nbaer-20\nafcr-34' [ 57 ]
10 Grouping As we see in the previous example, in order to reference a group by the name in the sub operation, we have to use \g<name>. We can also use named groups inside the pattern itself, as seen in the following example: >>>pattern = re.compile(r"(?p<word>\w+) (?P=word)") >>>match = pattern.search(r"hello hello world") >>>match.groups() ('hello',) This is simpler and more readable than using numbers. Through these examples, we've used the following three different ways to refer to named groups: Use Inside a pattern In the repl string of the sub operation In any of the operations of the MatchObject Syntax (?P=name) \g<name> match.group('name') Non-capturing groups As we've mentioned before, capturing content is not the only use of groups. There are cases when we want to use groups, but we're not interested in extracting the information; alternation would be a good example. That's why we have a way to create groups without capturing. Throughout this book, we've been using groups to create subexpressions, as can be seen in the following example: >>>re.search("españ(a ol)", "Español") <_sre.sre_match at 0x10e90b828> >>>re.search("españ(a ol)", "Español").groups() ('ol',) [ 58 ]
11 Chapter 3 You can see that we've captured a group even though we're not interested in the content of the group. So, let's try it without capturing, but first we have to know the syntax, which is almost the same as in normal groups, (?:pattern). As you can see, we've only added?:. Let's see the following example: >>>re.search("españ(?:a ol)", "Español") <_sre.sre_match at 0x10e912648> >>>re.search("españ(?:a ol)", "Español").groups() () After using the new syntax, we have the same functionality as before, but now we're saving resources and the regex is easier to maintain. Note that the group cannot be referenced. Atomic groups They're a special case of non-capturing groups; they're usually used to improve performance. It disables backtracking, so with them you can avoid cases where trying every possibility or path in the pattern doesn't make sense. This concept is difficult to understand, so stay with me up to the end of the section. The re module doesn't support atomic groups. So, in order to see an example, we're going to use the regex module: Imagine we have to look for an ID made up of one or more alphanumeric characters followed by a dash and by a digit: >>>data = "aaaaabbbbbaaaaccccccdddddaaa" >>>regex.match("(\w+)-\d",data) Let's see step by step what's happening here: 1. The regex engine matches the first a. 2. It then matches every character up to the end of the string. 3. It fails because it doesn't find the dash. 4. So, the engine does backtracking and tries the same with the following a. 5. Start the same process again. [ 59 ]
12 Grouping It tries this with every character. If you think about what we're doing, it doesn't make any sense to keep trying once you have failed the first time. And that's exactly what an atomic group is useful for. For example: >>>regex.match("(?>\w+)-\d",data) Here we've added?>, which indicates an atomic group, so once the regex engine fails to match, it doesn't keep trying with every character in the data. Special cases with groups Python provides us with some forms of groups that can help us to modify the regular expressions or even to match a pattern only when a previous group exists in the match, such as an if statement. Flags per group There is a way to apply the flags we've seen in Chapter 2, Regular Expressions with Python, using a special form of grouping: (?ilmsux). Letter i L m s u x Flag re.ignorecase re.locale re.multiline re.dotall re.unicode re.verbose For example: >>>re.findall(r"(?u)\w+",ur"ñ") [u'\xf1'] The above example is the same as: >>>re.findall(r"\w+",ur"ñ", re.u) [u'\xf1'] We've seen what these examples do several times in the previous chapter. Remember that a flag is applied to the whole expression. [ 60 ]
13 Chapter 3 yes-pattern no-pattern This is a very useful case of groups. It tries to match a pattern in case a previous one was found. On the other hand, it doesn't try to match a pattern in case a previous group was not found. In short, it's like an if-else statement. The syntax for this operation is as follows: (?(id/name)yes-pattern no-pattern) This expression means: if the group with this ID has already been matched, then at this point of the string, the yes-pattern pattern has to match. If the group hasn't been matched, then the no-pattern pattern has to match. Let's see how it works continuing with our trite example. We have a list of products, but in this case the ID can be made in two different ways: The country code (two digits), a dash, three or four alphanumeric characters, a dash, and the area code (2 digits). For example: 34-adrl-01. Three or four alphanumeric characters. For example: adrl. So, when there is a country code, we need to match the country area: >>>pattern = re.compile(r"(\d\d-)?(\w{3,4})(?(1)(-\d\d))") >>>pattern.match("34-erte-22") <_sre.sre_match at 0x10f68b7a0> >>>pattern.search("erte") <_sre.sre_match at 0x10f68b828> As you can see in the previous example, there is a match when we have a country code and area code. Note that when there is a country code but no area code, there is no match: >>>pattern.match("34-erte") None And what's no-pattern for? Let's add another constraint to the previous example: if there is no country code there has to be a name at the end of the string: The country code (2 digits), a dash, three or four alphanumeric characters, a dash, and the area code (2 digits). For example: 34-adrl-01 Three or four alphanumeric characters, followed by three or four characters. For example: adrl-sala. [ 61 ]
14 Grouping Let's see it in action: >>>pattern = re.compile(r"(\d\d-)?(\w{3,4})-(?(1)(\d\d) [a-z]{3,4})$") >>>pattern.match("34-erte-22") <_sre.sre_match at 0x10f6ee750> As expected, if there is a country code and an area code, there is a match. >>>pattern.match("34-erte") None In the preceding example, we do have a country area, but there is no area code, so there is no match. >>>pattern.match("erte-abcd") <_sre.sre_match at 0x10f6ee880> And finally, when there is no country area, there must be a name, so we have a match. Note that no-pattern is optional, so in the first example, we've omitted it. Overlapping groups Throughout Chapter 2, Regular Expressions with Python, we've seen several operations where there was a warning about overlapping groups: for example, the findall operation. This is something that seems to confuse a lot of people. So, let's try to bring some clarity with a simple example: >>>re.findall(r'(a b)+', 'abaca') ['a', 'a'] What's happening here? Why does the following expression give us 'a' and 'a' instead of 'aba' and 'a'? [ 62 ]
15 Chapter 3 Let's look at it step by step to understand the solution: a (a b)+ Captured Group: a b a (a b)+ (a b)+ M AT C H Captured Group: ab Captured Group: aba c (a b)+ a $ (a b)+ (a b)+ M AT C H Captured Group: a Overlapping groups matching process As we can see in the preceding figure, the characters aba are matched, but the captured group is only formed by a. This is because even though our regex is grouping every character, it stays with the last a. Keep this in mind because it's the key to understanding how it works. Stop for a moment and think about it, we're requesting the regex engine to capture all the groups made up of a or b, but just for one of the characters and that's the key. So, how can you capture the groups made of several 'a' or 'b' in any order? The following expression does the trick: >>>re.findall(r'((?:a b)+)', 'abbaca') ['abba', 'a'] We're asking the regex engine to capture every group made up of the subexpression (a b) and not to group just one character. One last thing on this if we would want to obtain every group made of a or b with findall, we could write this simple expression: >>>re.findall(r'(a b)', 'abaca') ['a', 'b', 'a', 'a'] In this case, we're asking the regex engine to capture a group made of a or b. As we're using findall, we get every pattern matched, so we get four groups. [ 63 ]
16 Grouping Rule of Thumb It's better to keep regular expressions as simple as you can. So, you should begin with the simplest expression and then build more complex expressions step by step and not the other way around. Summary Don't allow the simplicity of the chapter to fool you, what we have learned throughout this chapter will be very useful in your day-to-day work with regex, and it'll give you a lot of leverage. Let's summarize what we have learned so far. First, we have seen how a group can help us when we need to apply quantifiers to only some part of the expression. We have also learned how to use the captured groups in the pattern again or even in the replacement string in the sub operation, thanks to backreferences. In this chapter, we have also viewed named groups, a tool for improving the readability and future maintenance of the regex. Later on, we have learned to match a subexpression just in case a previous group exists or on the other hand, to match it when a previous group doesn't exist. Now that we know how to use groups, it's time to learn a more complex subject very close to groups; look around! [ 64 ]
17 Where to buy this book You can buy Mastering Python Regular Expressions from the Packt Publishing website: Free shipping to the US, UK, Europe and selected Asian countries. For more information, please read our shipping policy. Alternatively, you can buy the book from Amazon, BN.com, Computer Manuals and most internet book retailers.
Lecture 18 Regular Expressions
Lecture 18 Regular Expressions Many of today s web applications require matching patterns in a text document to look for specific information. A good example is parsing a html file to extract tags
Coaching Models. GROW Model
Coaching Models There are various effective coaching models which some coaches choose to use to structure their coaching sessions. The models may be helpful to guide your sessions through a logical sequence
Android Studio Application Development
Android Studio Application Development Belén Cruz Zapata Chapter No. 4 "Using the Code Editor" In this package, you will find: A Biography of the author of the book A preview chapter from the book, Chapter
C H A P T E R Regular Expressions regular expression
7 CHAPTER Regular Expressions Most programmers and other power-users of computer systems have used tools that match text patterns. You may have used a Web search engine with a pattern like travel cancun
Introduction to Python
Caltech/LEAD Summer 2012 Computer Science Lecture 2: July 10, 2012 Introduction to Python The Python shell Outline Python as a calculator Arithmetic expressions Operator precedence Variables and assignment
Demonstrating a DATA Step with and without a RETAIN Statement
1 The RETAIN Statement Introduction 1 Demonstrating a DATA Step with and without a RETAIN Statement 1 Generating Sequential SUBJECT Numbers Using a Retained Variable 7 Using a SUM Statement to Create SUBJECT
Developing SSRS Reports for Dynamics AX
Developing SSRS Reports for Dynamics AX Mukesh Hirwani Chapter No. 6 "Developing Reports Using RDP and Report Contracts" In this package, you will find: A Biography of the author of the book A preview
Introduction to Python
WEEK ONE Introduction to Python Python is such a simple language to learn that we can throw away the manual and start with an example. Traditionally, the first program to write in any programming language
Koha 3 Library Management System
P U B L I S H I N G community experience distilled Koha 3 Library Management System Savitra Sirohi Amit Gupta Chapter No.4 "Koha's Web Installer, Crontab, and Other Server Configurations" In this package,
DDBA 8438: Introduction to Hypothesis Testing Video Podcast Transcript
DDBA 8438: Introduction to Hypothesis Testing Video Podcast Transcript JENNIFER ANN MORROW: Welcome to "Introduction to Hypothesis Testing." My name is Dr. Jennifer Ann Morrow. In today's demonstration,
Magento 1.3 Theme Design
Magento 1.3 Theme Design Richard Carter Chapter No. 5 "Non-default Magento Themes" In this package, you will find: A Biography of the author of the book A preview chapter from the book, Chapter NO.5 "Non-default
Selenium 1.0 Testing Tools
P U B L I S H I N G community experience distilled Selenium 1.0 Testing Tools David Burns Chapter No. 6 "First Steps with Selenium RC" In this package, you will find: A Biography of the author of the book
Microsoft Dynamics AX 2012 Financial Management
Microsoft Dynamics AX 2012 Financial Management Mohamed Aamer Chapter No. 3 "Functioning of Cash Flow Management" In this package, you will find: A Biography of the author of the book A preview chapter
Rake Task Management Essentials
Rake Task Management Essentials Andrey Koleshko Chapter No. 8 "Testing Rake Tasks" In this package, you will find: A Biography of the author of the book A preview chapter from the book, Chapter NO.8 "Testing
Quick Tricks for Multiplication
Quick Tricks for Multiplication Why multiply? A computer can multiply thousands of numbers in less than a second. A human is lucky to multiply two numbers in less than a minute. So we tend to have computers
As you ask them and if not, you have things to question, we can answer, we can give advice to you by email within 24 hours.
Thanks for your patience and welcome to the CDI MobyMax Interactive Webinar this afternoon. We appreciate you joining us. I now have with me most of you are. Certainly, we'll do our best to make today's
Regular Expressions Overview Suppose you needed to find a specific IPv4 address in a bunch of files? This is easy to do; you just specify the IP
Regular Expressions Overview Suppose you needed to find a specific IPv4 address in a bunch of files? This is easy to do; you just specify the IP address as a string and do a search. But, what if you didn
CS 1133, LAB 2: FUNCTIONS AND TESTING http://www.cs.cornell.edu/courses/cs1133/2015fa/labs/lab02.pdf
CS 1133, LAB 2: FUNCTIONS AND TESTING http://www.cs.cornell.edu/courses/cs1133/2015fa/labs/lab02.pdf First Name: Last Name: NetID: The purpose of this lab is to help you to better understand functions:
Regular Expression. n What is Regex? n Meta characters. n Pattern matching. n Functions in re module. n Usage of regex object. n String substitution
Regular Expression n What is Regex? n Meta characters n Pattern matching n Functions in re module n Usage of regex object n String substitution What is regular expression? n String search n (e.g.) Find
Talend for Big Data. Bahaaldine Azarmi. Chapter No. 4 "Processing Tweets with Apache Hive"
Talend for Big Data Bahaaldine Azarmi Chapter No. 4 "Processing Tweets with Apache Hive" In this package, you will find: A Biography of the author of the book A preview chapter from the book, Chapter NO.4
Introduction to Python
Introduction to Python Girls Programming Network School of Information Technologies University of Sydney Mini-Lecture 1 Python Install Running Summary 2 Outline 1 What is Python? 2 Installing Python 3
360 feedback. Manager. Development Report. Sample Example. name: email: date: [email protected]
60 feedback Manager Development Report name: email: date: Sample Example [email protected] 9 January 200 Introduction 60 feedback enables you to get a clear view of how others perceive the way you work.
Android Development Tools for Eclipse
Android Development Tools for Eclipse Sanjay Shah Khirulnizam Abd Rahman Chapter No. 1 "Installing Eclipse, ADT, and SDK" In this package, you will find: A Biography of the author of the book A preview
CSC 221: Computer Programming I. Fall 2011
CSC 221: Computer Programming I Fall 2011 Python control statements operator precedence importing modules random, math conditional execution: if, if-else, if-elif-else counter-driven repetition: for conditional
Work Smarter: Object-Oriented User Experience Design. A conversation with Dr. Eric Schaffer CEO and Founder Human Factors International
Work Smarter: Object-Oriented User Experience Design A conversation with Dr. Eric Schaffer CEO and Founder Human Factors International Years ago, all computer programs were written into a flat file. There
Welcome to Introduction to programming in Python
Welcome to Introduction to programming in Python Suffolk One, Ipswich, 4:30 to 6:00 Tuesday Jan 14, Jan 21, Jan 28, Feb 11 Welcome Fire exits Toilets Refreshments 1 Learning objectives of the course An
Microsoft BizTalk ESB Toolkit 2.1
Microsoft BizTalk ESB Toolkit 2.1 Andrés Del Río Benito Howard S. Edidin Chapter No. 1 "ESB Toolkit, Architecture, and Features" In this package, you will find: A Biography of the author of the book A
Click on the links below to jump directly to the relevant section
Click on the links below to jump directly to the relevant section What is algebra? Operations with algebraic terms Mathematical properties of real numbers Order of operations What is Algebra? Algebra is
A PRACTICAL GUIDE TO db CALCULATIONS
A PRACTICAL GUIDE TO db CALCULATIONS This is a practical guide to doing db (decibel) calculations, covering most common audio situations. You see db numbers all the time in audio. You may understand that
Very simple: the phrase 'can I' followed by the verb. But what verb form comes after the phrase 'can I'? Listen to these two examples of asking.
BBC Learning English How to Asking permission Hello this is BBC Learning English dot com, with me, Jackie Dalton. This programme is about asking permission which means asking someone if you're allowed
POLITE ENGLISH. Giving advice FREE ON-LINE COURSE. Lesson 2: version without a key SZKOLENIA JĘZYKOWE DLA FIRM ZREALIZUJEMY TWÓJ CEL!
POLITE ENGLISH FREE ON-LINE COURSE Lesson 2: Giving advice version without a key WARM UP THINK Do you like giving advice? Do you often ask for advice? WATCH OUT! Do you know the difference between: ADVICE
Regular Expressions (in Python)
Regular Expressions (in Python) Python or Egrep We will use Python. In some scripting languages you can call the command grep or egrep egrep pattern file.txt E.g. egrep ^A file.txt Will print all the line
XML Character Encoding and Decoding
XML Character Encoding and Decoding January 2013 Table of Contents 1. Excellent quotes 2. Lots of character conversions taking place inside our computers and on the Web 3. Well-formedness error when encoding="..."
Active Listening. Learning Objectives. By the end of this module, the learner will have
1 Active Listening Learning Objectives By the end of this module, the learner will have An understanding of what is meant by active listening Gained insight into your natural listening strengths and areas
Learning Magento Theme Development
Learning Magento Theme Development Richard Carter Chapter No. 1 "Introduction to Magento and Magento Themes" In this package, you will find: A Biography of the author of the book A preview chapter from
Writing Thesis Defense Papers
Writing Thesis Defense Papers The point of these papers is for you to explain and defend a thesis of your own critically analyzing the reasoning offered in support of a claim made by one of the philosophers
So, why should you have a website for your church? Isn't it just another thing to add to the to-do list? Or will it really be useful?
Why Have A Website? So, why should you have a website for your church? Isn't it just another thing to add to the to-do list? Or will it really be useful? Obviously, 'everyone else does' it not a good enough
How To Optimize LANDING PAGES GENERATE MORE LEADS. Tips and Examples From Industry Experts that Will Help Skyrocket Your Landing Page Conversion Rates
How To Optimize LANDING PAGES to GENERATE MORE LEADS Tips and Examples From Industry Experts that Will Help Skyrocket Your Landing Page Conversion Rates A Publication of Table of Contents Written by: Introduction
Regular Expression Syntax
1 of 5 12/22/2014 9:55 AM EmEditor Home - EmEditor Help - How to - Search Regular Expression Syntax EmEditor regular expression syntax is based on Perl regular expression syntax. Literals All characters
Learning System Center App Controller
Fr System Center App Controller provides an integrated console that helps you manage public and private clouds, as well as cloud-based virtual machines and services. Learning System Center App Controller
100 Ways To Improve Your Sales Success. Some Great Tips To Boost Your Sales
100 Ways To Improve Your Sales Success Some Great Tips To Boost Your Sales 100 Ways To Improve Your Sales Success By Sean Mcpheat, Managing Director Of The Sales Training Consultancy What makes a successful
The «include» and «extend» Relationships in Use Case Models
The «include» and «extend» Relationships in Use Case Models Introduction UML defines three stereotypes of association between Use Cases, «include», «extend» and generalisation. For the most part, the popular
Danone Conference Call
Danone Conference Call Tuesday, 14 th June 2016 Danone Conference Call Cécile Cabanis Chief Financial Officer, Danone Welcome Good morning everyone. Thank you for attending this call on short notice. You
Data Structures. Topic #12
Data Structures Topic #12 Today s Agenda Sorting Algorithms insertion sort selection sort exchange sort shell sort radix sort As we learn about each sorting algorithm, we will discuss its efficiency Sorting
Using Regular Expressions in Oracle
Using Regular Expressions in Oracle Everyday most of us deal with multiple string functions in Sql. May it be for truncating a string, searching for a substring or locating the presence of special characters.
Everyone cringes at the words "Music Theory", but this is mainly banjo related and very important to learning how to play.
BLUEGRASS MUSIC THEORY 101 By Sherry Chapman Texasbanjo The Banjo Hangout Introduction Everyone cringes at the words "Music Theory", but this is mainly banjo related and very important to learning how
FABRICATION DRAWINGS A Paradigm Shift
INNOVATIVE DIMENSIONS Presented by Fitzpatrick Engineering Group March 2013 2012 Finalist Innovation in Structural Engineering DRAWINGS A Paradigm Shift 19520 Catawba Avenue, Ste 311 Cornelius, NC 28031-3711
The Total Newbie s Introduction to Heat Orchestration in OpenStack
Tutorial The Total Newbie s Introduction to Heat Orchestration in OpenStack OpenStack is undeniably becoming part of the mainstream cloud computing world. It is emerging as the new standard for private
Regular Expression Searching
Regular Expression Searching Regular expressions allow forensics analysts to search through large quantities of text information for patterns of data such as the following: Telephone Numbers Social Security
Effective Counseling Skills
Effective Counseling Skills All rights reserved. Daniel Keeran, MSW College of Mental Health Counseling www.collegemhc.com Daniel Keeran, MSW, has been a professional counselor and therapist for over 30
Backyard Visitor by Kelly Hashway
Mom! Sarah yelled, running into the house. What is it? her mother asked, looking up from her book. There s a baby deer in the backyard. Can we feed it? Sarah ran for the bowl of fruit on the counter and
Drupal 6 Site Builder Solutions
Drupal 6 Site Builder Solutions Mark Noble Chapter No. 6 "Newsletters and Calendars" In this package, you will find: A Biography of the author of the book A preview chapter from the book, Chapter NO.6
If you get through this entire PDF and think you did this already and it didn t work then please email me at proedgemarketing@gmail.
KINDLE FINANCIAL I'm making more than enough to live off so this is my last Kindle product EVER. Last month I made over $15,000 selling books so my going away gift to everyone is my Kindle strategy. Below,
Exercise 4 Learning Python language fundamentals
Exercise 4 Learning Python language fundamentals Work with numbers Python can be used as a powerful calculator. Practicing math calculations in Python will help you not only perform these tasks, but also
Parsing Technology and its role in Legacy Modernization. A Metaware White Paper
Parsing Technology and its role in Legacy Modernization A Metaware White Paper 1 INTRODUCTION In the two last decades there has been an explosion of interest in software tools that can automate key tasks
Hyper-V Replica Essentials
Hyper-V Replica Essentials Vangel Krstevski Chapter No. 3 "Configuring Hyper-V Replica" In this package, you will find: A Biography of the author of the book A preview chapter from the book, Chapter NO.3
Formal Languages and Automata Theory - Regular Expressions and Finite Automata -
Formal Languages and Automata Theory - Regular Expressions and Finite Automata - Samarjit Chakraborty Computer Engineering and Networks Laboratory Swiss Federal Institute of Technology (ETH) Zürich March
Python Lists and Loops
WEEK THREE Python Lists and Loops You ve made it to Week 3, well done! Most programs need to keep track of a list (or collection) of things (e.g. names) at one time or another, and this week we ll show
Regular Expressions. Abstract
Regular Expressions Sanjiv K. Bhatia Department of Mathematics & Computer Science University of Missouri St. Louis St. Louis, MO 63121 email: [email protected] Abstract Regular expressions provide a powerful
Multiplication Rules! Tips to help your child learn their times tables
Multiplication Rules! Tips to help your child learn their times tables 1. Have fun! We want relaxed kids and plenty of giggles. 2. Go slowly and relax. 3. Do the preliminary review, all the preliminary
CPS122 - OBJECT-ORIENTED SOFTWARE DEVELOPMENT. Team Project
CPS122 - OBJECT-ORIENTED SOFTWARE DEVELOPMENT Team Project Due Dates: See syllabus for due dates for each milestone This project spans much of the semester, to be completed as a series of milestones, each
Version 2.5.0 22 August 2016
Version 2.5.0 22 August 2016 Published by Just Great Software Co. Ltd. Copyright 2009 2016 Jan Goyvaerts. All rights reserved. RegexMagic and Just Great Software are trademarks of Jan Goyvaerts i Table
Chapter 2 How To Cheat A Barre Chord
Chapter 2 How To Cheat A Barre Chord Now that you ve learned a variety of chords in different positions, there are times that we want to eliminate some of the notes. I know, in the previous chapter I explained
Part II. Managing Issues
Managing Issues Part II. Managing Issues If projects are the most important part of Redmine, then issues are the second most important. Projects are where you describe what to do, bring everyone together,
Shopify Application Development
Shopify Application Development Michael Larkin Chapter No. 1 "Getting Started with Shopify" In this package, you will find: A Biography of the author of the book A preview chapter from the book, Chapter
Responsive Website Design: Get Your Website Ready for Mobile Users
Responsive Website Design: Get Your Website Ready for Mobile Users Goals of this Whitepaper Everyone has seen the explosion of smart phones over the past few years. Our browsing habits have expanded to
Say Hello to Visual IVR IVR for the twenty first century because talk isn t cheap
OVERVIEW VISUAL IVR Say Hello to Visual IVR IVR for the twenty first century because talk isn t cheap Customers Love Mobile The Internet and mobile devices have had a huge impact on customer expectations.
Amazon S3 Essentials
Fr Amazon Simple Storage Service (Amazon S3), provides developers and IT teams with secure, durable, and highly scalable object storage. Amazon S3 is easy to use, with a simple web services interface to
Principles of Modeling: Real World - Model World
MODELING BASICS Principles of Modeling: Real World - Model World Tony Starfield recorded: 2005 Welcome Welcome to Principles of Modeling We all build models on a daily basis. Sometimes we build them deliberately,
Using our Club website to manage team Practice Schedules
Login to www.somersethillslacrosse.com Parents who are new to our programs often ask How do you schedule practices, coach? and for most of us the answer is Make sure I have your correct email address!
Robotium Automated Testing for Android
Robotium Automated Testing for Android Hrushikesh Zadgaonkar Chapter No. 1 "Getting Started with Robotium" In this package, you will find: A Biography of the author of the book A preview chapter from the
Version Control. Luka Milovanov [email protected]
Version Control Luka Milovanov [email protected] Configuration Management Configuration management is the management of system change to software products Version management: consistent scheme of version
Quality Meets the CEO
Quality Meets the CEO Jeffery E. Payne [email protected] Reliable Software Technologies Corporate management does not care about quality. This is the cold, hard reality of the software world. Management
Reading Strategies by Level. Early Emergent Readers
The charts below were created as a common language for teachers and students in the Wallingford Public Schools in kindergarten through eighth grade. The level of the chart selected for use in the classroom
BBBT Podcast Transcript
BBBT Podcast Transcript About the BBBT Vendor: The Boulder Brain Trust, or BBBT, was founded in 2006 by Claudia Imhoff. Its mission is to leverage business intelligence for industry vendors, for its members,
Lecture 4. Regular Expressions grep and sed intro
Lecture 4 Regular Expressions grep and sed intro Previously Basic UNIX Commands Files: rm, cp, mv, ls, ln Processes: ps, kill Unix Filters cat, head, tail, tee, wc cut, paste find sort, uniq comm, diff,
CSCE 110 Programming I Basics of Python: Variables, Expressions, and Input/Output
CSCE 110 Programming Basics of Python: Variables, Expressions, and nput/output Dr. Tiffani L. Williams Department of Computer Science and Engineering Texas A&M University Fall 2011 Python Python was developed
Independent samples t-test. Dr. Tom Pierce Radford University
Independent samples t-test Dr. Tom Pierce Radford University The logic behind drawing causal conclusions from experiments The sampling distribution of the difference between means The standard error of
WHY AND HOW TO REVISE
Page 1 of 5 Revising Your Paper WHY AND HOW TO REVISE Most of us who compose on a computer understand revision as an ongoing, even constant process. Every time you hit the delete button, every time you
This document attempts to take some of the fear and uncertainty away from the CRM concept:
What is CRM? What is CRM? Today growing businesses manage customer connections and information in a variety of ways. Some use old fashioned note cards and Rolodex. Others store information on their mobile
Games, gadgets, and other goods discount coupon: An ethics case
ABSTRACT Games, gadgets, and other goods discount coupon: An ethics case Magdy Farag California State Polytechnic University, Pomona This short ethics case is based on a real-world situation, so the names
Drupal 7 Fields/CCK Beginner's Guide
P U B L I S H I N G community experience distilled Drupal 7 Fields/CCK Beginner's Guide Dave Poon Chapter No. 5 "File and Image Fields" In this package, you will find: A Biography of the author of the
Free Report. My Top 10 Tips to Betting Like a Pro With Zero Risk
Free Report My Top 10 Tips to Betting Like a Pro With Zero Risk Legal Disclaimer: EVERY EFFORT HAS BEEN MADE TO ACCURATELY REPRESENT THIS PRODUCT AND IT'S POTENTIAL. EVEN THOUGH THIS INDUSTRY IS ONE OF
Greatest Common Factor and Least Common Multiple
Greatest Common Factor and Least Common Multiple Intro In order to understand the concepts of Greatest Common Factor (GCF) and Least Common Multiple (LCM), we need to define two key terms: Multiple: Multiples
SQL Server Integration Services Using Visual Studio 2005
SQL Server Integration Services Using Visual Studio 2005 A Beginners Guide Jayaram Krishnaswamy Chapter No. 13 "Package to Copy a Table from Oracle XE" In this package, you will find: A Biography of the
Using Use Cases for requirements capture. Pete McBreen. 1998 McBreen.Consulting
Using Use Cases for requirements capture Pete McBreen 1998 McBreen.Consulting [email protected] All rights reserved. You have permission to copy and distribute the document as long as you make no changes
WHITE PAPER. Data Center Fabrics. Why the Right Choice is so Important to Your Business
WHITE PAPER Data Center Fabrics Why the Right Choice is so Important to Your Business Introduction Data center fabrics are emerging as the preferred architecture for next-generation virtualized data centers,
Module 6.3 Client Catcher The Sequence (Already Buying Leads)
Module 6.3 Client Catcher The Sequence (Already Buying Leads) Welcome to Module 6.3 of the Client Catcher entitled The Sequence. I recently pulled over 300 of the local lead generation explosion members
Waspmote. Quickstart Guide
Waspmote Quickstart Guide Index Document version: v4.3-11/2014 Libelium Comunicaciones Distribuidas S.L. INDEX 1. Introduction... 3 2. General and safety information... 4 3. Waspmote s Hardware Setup...
IF The customer should receive priority service THEN Call within 4 hours PCAI 16.4
Back to Basics Backward Chaining: Expert System Fundamentals By Dustin Huntington Introduction Backward chaining is an incredibly powerful yet widely misunderstood concept, yet it is key to building many
Playing with Numbers
PLAYING WITH NUMBERS 249 Playing with Numbers CHAPTER 16 16.1 Introduction You have studied various types of numbers such as natural numbers, whole numbers, integers and rational numbers. You have also
Next Generation Tech-Talk. Cloud Based Business Collaboration with Cisco Spark
Next Generation Tech-Talk Cloud Based Business Collaboration with Cisco Spark 2 [music] 00:06 Phil Calzadilla: Hello, hello! Welcome. This is Phil Calzadilla founder and CEO of NextNet Partners, and I'd
Seriously Simple Sums! Vedic Maths Free Tutorial. Maths Tips and Tricks to Improve Your Math Abilities
Copyright Notice This e-book is free! Maths Tips and Tricks to Improve Your Math Abilities This publication is protected by international copyright laws. You have the author s permission to transmit this
Oracle Siebel CRM 8 Developer's Handbook
P U B L I S H I N G professional expertise distilled Oracle Siebel CRM 8 Developer's Handbook Alexander Hansal Chapter No.13 "User Properties" In this package, you will find: A Biography of the author
Drupal in the Cloud. Scaling with Drupal and Amazon Web Services. Northern Virginia Drupal Meetup
Drupal in the Cloud Scaling with Drupal and Amazon Web Services Northern Virginia Drupal Meetup 3 Dec 2008 Cast of Characters Eric at The Case Foundation: The Client With typical client challenges Cost:
Integers are positive and negative whole numbers, that is they are; {... 3, 2, 1,0,1,2,3...}. The dots mean they continue in that pattern.
INTEGERS Integers are positive and negative whole numbers, that is they are; {... 3, 2, 1,0,1,2,3...}. The dots mean they continue in that pattern. Like all number sets, integers were invented to describe
