Python Regular Expressions: Difference between revisions
Jump to navigation
Jump to search
Line 19: | Line 19: | ||
<code>[^a]</code> | <code>[^a]</code> | ||
==<tt>. (dot)</tt>== | ==<tt>. (dot)</tt>== | ||
Stands for "any one character". | Stands for "any one character". To match an actual dot, escape it: | ||
<font size=-1. | |||
\. | |||
</font> | |||
=NOT Metacharacters= | =NOT Metacharacters= |
Revision as of 00:01, 16 March 2022
External
Internal
TODO
PROCESS: https://docs.python.org/3/howto/regex.html#regex-howto
Overview
A regular expression is specified with r"..."
Metacharacters
(...)
Used to capture groups.
^
Not a certain character, or a set of characters.
[^a]
. (dot)
Stands for "any one character". To match an actual dot, escape it: <font size=-1.
\.
NOT Metacharacters
The following characters are matched without any escaping:
{...}
Patterns
At most one group of characters:
(...)?
Replacing Regular Expression Occurrences
import re
s = "this is a {{color}} car"
print(re.sub(r"{{color}}", 'blue', s))
Strip quotes:
s = "'something'"
re.sub(r"'$", '', re.sub(r"^'", '', s))
Capture groups and use them in the replacement:
s = 'this is red'
s2 = re.sub(r'^(this is).*$', '\\1 blue', s)
assert 'this is blue' == s2
To dynamically build a regular expression, use rf'...'
s = 'this is a red string'
color = 'red'
s2 = re.sub(rf'{color}', 'blue', s)
assert 'this is a blue string' == s2
Match a new line:
r'\n'
Match not a new line:
r'[^\n]'
Match a Pattern and Pick Up Groups
import re
p = re.compile(r'^(\w+):(\w+)-(\w+)$')
s = 'abc:mnp-xyz'
m = p.match(s)
if m:
assert 'abc:mnp-xyz' == m.group(0)
assert 'abc' == m.group(1)
assert 'mnp' == m.group(2)
assert 'xyz' == m.group(3)
Groups are 1-based. group(0)
represents the entire expression.
Scan a String
match = re.search(pattern, string)
if match:
process(match)