Regular Expressions 101

Save & Share

Flavor

  • PCRE2 (PHP >=7.3)
  • PCRE (PHP <7.3)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java 8
  • .NET 7.0 (C#)
  • Rust
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests

Tools

Sponsors
There are currently no sponsors. Become a sponsor today!
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression
No Match

r'
'
gm

Test String

Code Generator

Generated Code

# coding=utf8 # the above tag defines encoding for this document and is for Python 2.x compatibility import re regex = r'COV2-([0-9]+)([\s]+)([A-Z]+)' test_str = (" Name CDRH3\n" "0 COV2-2997 ARGAIPPNSRAEIDY\n" "1 COV2-3012 ARVLYDSSGFYNWFDP\n" "2 COV2-2961 AAPYCSSISCNDGFDI\n" "3 COV2-3025 AAPYCSSISCNDGFDI\n" "4 COV2-2046 AKAHSTGHQYYYGMDV\n" "5 COV2-2196 AAPYCSSISCNDGFDI\n" "6 COV2-2901 ARSYDILTGYRDAFDI\n" "7 COV2-2070 ARVGYSQGYYYYYMDV\n" "8 COV2-2132 ARDFLRWHDL\n" "9 COV2-2911 ARMSRGYNYAYTFDI\n" "10 COV2-2098 VKGLFDWFPL\n" "11 COV2-2108 AKGVDYGGKLAYFDS\n" "12 COV2-2114 ARGRGYSNYGASYYMDV\n" "13 COV2-2304 ARDPVWVDGELLSGGIPFDY\n" "14 COV2-2078 ARVGVSGFKSGSNWYFDL\n" "15 COV2-2299 ARDIDSGYDPTPVFDY\n" "16 COV2-2351 ARRFYGPSSFDY\n" "17 COV2-2318 ARGVVTYDY\n" "18 COV2-2703 ARARGGYNWNFDY\n" "19 COV2-2277 ARDVPTTVTAFTVFTY\n" "20 COV2-2068 ARSYDILTGYRDAFDI\n" "21 COV2-2504 ARVVVLGYGRPNNYYDGRNVWDY\n" "22 COV2-2510 ARWGPDYGDYASNDY\n" "23 COV2-2308 VKGLFDWFPL\n" "24 COV2-2391 ARMRSGWPTHGRPDDF\n" "25 COV2-2767 ARSYDILTGYRDAFDI\n" "26 COV2-2113 ARDFLRWHDL\n" "27 COV2-2290 ARMRSGWPTHGRPDDF\n" "28 COV2-2130 TTAGSYYYDTVGPGLPEGKFDY\n" "29 COV2-2050 ARVVVLGYGRPNNYYDGRNVWDY\n" ".. ... ...\n" "355 COV2-2587 AHRLWFRDAFDI\n" "356 COV2-2551 ASGPPYMATFSYYFDY\n" "357 COV2-2481 ARGWFGELLKGTYWFDP\n" "358 COV2-2029 ARPTAGAGGAFDI\n" "359 COV2-2590 ARGRVGYVGSGSRGYYYYYDMDV\n" "360 COV2-2408 ARVGGISPYYYYYYMDV\n" "361 COV2-2565 ARGAASFDY\n" "362 COV2-2641 AKSYNGNYYDAFDI\n" "363 COV2-2449 ARASYNSNWSIGEYFRD\n" "364 COV2-2619 ARVEGDWLLGGPYYHYYGMDV\n" "365 COV2-2367 ARTSHYDSSGSYFEY\n" "366 COV2-2343 ARVQRRRLDY\n" "367 COV2-2270 AITYYYDSSGYWWDD\n" "368 COV2-2187 ARGGATNFDY\n" "369 COV2-2478 AKGIYYDIFMPLLD\n" "370 COV2-2820 ARDQSQGAYILTGYRGYGMDV\n" "371 COV2-2620 ARADTMVRGTYFEY\n" "372 COV2-2171 ARLSGSSWDFDY\n" "373 COV2-2583 ARGGIYYLVRGFIIGYYGMDV\n" "374 COV2-2227 ARDQSQGAYILTGYRGYGMDV\n" "375 COV2-2160 ARSTSGSYYYGMDV\n" "376 COV2-2178 ARVGSSSWYFDY\n" "377 COV2-2159 ARSTSGSYYYGMDV\n" "378 COV2-2166 ARIGHFDSSGYYLDY\n" "379 COV2-2224 AKDGSIAAADY\n" "380 COV2-2214 ARIGHFDSSGYYLDY\n" "381 COV2-2218 ARPYTGSYKSYMDV\n" "382 COV2-2216 ARTSHYDSSGSYFEY\n" "383 COV2-2175 ARLSGSSWDFDY\n" "384 COV2-2183 ARADTMVRGTYFEY\n\n" "[385 rows x 2 columns]\n" " Name CDRH3\n" "0 COV2-2997 ARGAIPPNSRAEIDY\n" "1 COV2-3012 ARVLYDSSGFYNWFDP\n" "2 COV2-2961 AAPYCSSISCNDGFDI\n" "3 COV2-3025 AAPYCSSISCNDGFDI\n" "4 COV2-2046 AKAHSTGHQYYYGMDV\n" "5 COV2-2196 AAPYCSSISCNDGFDI\n" "6 COV2-2901 ARSYDILTGYRDAFDI\n" "7 COV2-2070 ARVGYSQGYYYYYMDV\n" "8 COV2-2132 ARDFLRWHDL\n" "9 COV2-2911 ARMSRGYNYAYTFDI\n" "10 COV2-2098 VKGLFDWFPL\n" "11 COV2-2108 AKGVDYGGKLAYFDS\n" "12 COV2-2114 ARGRGYSNYGASYYMDV\n" "13 COV2-2304 ARDPVWVDGELLSGGIPFDY\n" "14 COV2-2078 ARVGVSGFKSGSNWYFDL\n" "15 COV2-2299 ARDIDSGYDPTPVFDY\n" "16 COV2-2351 ARRFYGPSSFDY\n" "17 COV2-2318 ARGVVTYDY\n" "18 COV2-2703 ARARGGYNWNFDY\n" "19 COV2-2277 ARDVPTTVTAFTVFTY\n" "20 COV2-2068 ARSYDILTGYRDAFDI\n" "21 COV2-2504 ARVVVLGYGRPNNYYDGRNVWDY\n" "22 COV2-2510 ARWGPDYGDYASNDY\n" "23 COV2-2308 VKGLFDWFPL\n" "24 COV2-2391 ARMRSGWPTHGRPDDF\n" "25 COV2-2767 ARSYDILTGYRDAFDI\n" "26 COV2-2113 ARDFLRWHDL\n" "27 COV2-2290 ARMRSGWPTHGRPDDF\n" "28 COV2-2130 TTAGSYYYDTVGPGLPEGKFDY\n" "29 COV2-2050 ARVVVLGYGRPNNYYDGRNVWDY\n" ".. ... ...\n" "355 COV2-2587 AHRLWFRDAFDI\n" "356 COV2-2551 ASGPPYMATFSYYFDY\n" "357 COV2-2481 ARGWFGELLKGTYWFDP\n" "358 COV2-2029 ARPTAGAGGAFDI\n" "359 COV2-2590 ARGRVGYVGSGSRGYYYYYDMDV\n" "360 COV2-2408 ARVGGISPYYYYYYMDV\n" "361 COV2-2565 ARGAASFDY\n" "362 COV2-2641 AKSYNGNYYDAFDI\n" "363 COV2-2449 ARASYNSNWSIGEYFRD\n" "364 COV2-2619 ARVEGDWLLGGPYYHYYGMDV\n" "365 COV2-2367 ARTSHYDSSGSYFEY\n" "366 COV2-2343 ARVQRRRLDY\n" "367 COV2-2270 AITYYYDSSGYWWDD\n" "368 COV2-2187 ARGGATNFDY\n" "369 COV2-2478 AKGIYYDIFMPLLD\n" "370 COV2-2820 ARDQSQGAYILTGYRGYGMDV\n" "371 COV2-2620 ARADTMVRGTYFEY\n" "372 COV2-2171 ARLSGSSWDFDY\n" "373 COV2-2583 ARGGIYYLVRGFIIGYYGMDV\n" "374 COV2-2227 ARDQSQGAYILTGYRGYGMDV\n" "375 COV2-2160 ARSTSGSYYYGMDV\n" "376 COV2-2178 ARVGSSSWYFDY\n" "377 COV2-2159 ARSTSGSYYYGMDV\n" "378 COV2-2166 ARIGHFDSSGYYLDY\n" "379 COV2-2224 AKDGSIAAADY\n" "380 COV2-2214 ARIGHFDSSGYYLDY\n" "381 COV2-2218 ARPYTGSYKSYMDV\n" "382 COV2-2216 ARTSHYDSSGSYFEY\n" "383 COV2-2175 ARLSGSSWDFDY\n" "384 COV2-2183 ARADTMVRGTYFEY\n\n" "[385 rows x 2 columns]\n" " Name CDRH3\n" "0 COV2-2997 ARGAIPPNSRAEIDY\n" "1 COV2-3012 ARVLYDSSGFYNWFDP\n" "2 COV2-2961 AAPYCSSISCNDGFDI\n" "3 COV2-3025 AAPYCSSISCNDGFDI\n" "4 COV2-2046 AKAHSTGHQYYYGMDV\n" "5 COV2-2196 AAPYCSSISCNDGFDI\n" "6 COV2-2901 ARSYDILTGYRDAFDI\n" "7 COV2-2070 ARVGYSQGYYYYYMDV\n" "8 COV2-2132 ARDFLRWHDL\n" "9 COV2-2911 ARMSRGYNYAYTFDI\n" "10 COV2-2098 VKGLFDWFPL\n" "11 COV2-2108 AKGVDYGGKLAYFDS\n" "12 COV2-2114 ARGRGYSNYGASYYMDV\n" "13 COV2-2304 ARDPVWVDGELLSGGIPFDY\n" "14 COV2-2078 ARVGVSGFKSGSNWYFDL\n" "15 COV2-2299 ARDIDSGYDPTPVFDY\n" "16 COV2-2351 ARRFYGPSSFDY\n" "17 COV2-2318 ARGVVTYDY\n" "18 COV2-2703 ARARGGYNWNFDY\n" "19 COV2-2277 ARDVPTTVTAFTVFTY\n" "20 COV2-2068 ARSYDILTGYRDAFDI\n" "21 COV2-2504 ARVVVLGYGRPNNYYDGRNVWDY\n" "22 COV2-2510 ARWGPDYGDYASNDY\n" "23 COV2-2308 VKGLFDWFPL\n" "24 COV2-2391 ARMRSGWPTHGRPDDF\n" "25 COV2-2767 ARSYDILTGYRDAFDI\n" "26 COV2-2113 ARDFLRWHDL\n" "27 COV2-2290 ARMRSGWPTHGRPDDF\n" "28 COV2-2130 TTAGSYYYDTVGPGLPEGKFDY\n" "29 COV2-2050 ARVVVLGYGRPNNYYDGRNVWDY\n" ".. ... ...\n" "355 COV2-2587 AHRLWFRDAFDI\n" "356 COV2-2551 ASGPPYMATFSYYFDY\n" "357 COV2-2481 ARGWFGELLKGTYWFDP\n" "358 COV2-2029 ARPTAGAGGAFDI\n" "359 COV2-2590 ARGRVGYVGSGSRGYYYYYDMDV\n" "360 COV2-2408 ARVGGISPYYYYYYMDV\n" "361 COV2-2565 ARGAASFDY\n" "362 COV2-2641 AKSYNGNYYDAFDI\n" "363 COV2-2449 ARASYNSNWSIGEYFRD\n" "364 COV2-2619 ARVEGDWLLGGPYYHYYGMDV\n" "365 COV2-2367 ARTSHYDSSGSYFEY\n" "366 COV2-2343 ARVQRRRLDY\n" "367 COV2-2270 AITYYYDSSGYWWDD\n" "368 COV2-2187 ARGGATNFDY\n" "369 COV2-2478 AKGIYYDIFMPLLD\n" "370 COV2-2820 ARDQSQGAYILTGYRGYGMDV\n" "371 COV2-2620 ARADTMVRGTYFEY\n" "372 COV2-2171 ARLSGSSWDFDY\n" "373 COV2-2583 ARGGIYYLVRGFIIGYYGMDV\n" "374 COV2-2227 ARDQSQGAYILTGYRGYGMDV\n" "375 COV2-2160 ARSTSGSYYYGMDV\n" "376 COV2-2178 ARVGSSSWYFDY\n" "377 COV2-2159 ARSTSGSYYYGMDV\n" "378 COV2-2166 ARIGHFDSSGYYLDY\n" "379 COV2-2224 AKDGSIAAADY\n" "380 COV2-2214 ARIGHFDSSGYYLDY\n" "381 COV2-2218 ARPYTGSYKSYMDV\n" "382 COV2-2216 ARTSHYDSSGSYFEY\n" "383 COV2-2175 ARLSGSSWDFDY\n" "384 COV2-2183 ARADTMVRGTYFEY\n\n" "[385 rows x 2 columns]\n") matches = re.finditer(regex, test_str, re.MULTILINE) for matchNum, match in enumerate(matches, start=1): print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group())) for groupNum in range(0, len(match.groups())): groupNum = groupNum + 1 print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum))) # Note: for Python 2.7 compatibility, use ur'' to prefix the regex and u"" to prefix the test string and substitution.

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html