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

Substitution

Processing...

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'^(?!["#\n])(.*?)=(.*?)([#].*)?$' test_str = ("\"\"\"Configuration file.\"\"\"\n\n\n" "CONFIG_VERSION = \"0.5.1\" # still have some obsolete keys\n\n\n" "# ======================================================================================================================\n" "# ROBOT HARDWARE PROPERTIES\n" "# ======================================================================================================================\n" "CORK_TO_CAMERA_DISTANCE_X = 2 #21 #3 # # distance between camera and cork on the robot, X axis, relative, mm\n" "CORK_TO_CAMERA_DISTANCE_Y = 28 #24 #25# distance between camera and cork on the robot, Y axis, relative, mm\n\n\n" "# ======================================================================================================================\n" "# NAVIGATION ROUTING SETTINGS\n" "# ======================================================================================================================\n" "#KP = 0.2 # for -10000 : *0.55 wheels turning degrees multiplier\n" "#KI = 0.0092 # fpr rpm-1000 : *0.91\n" "KP = {-2500:0.001, 0:0.2, -10000:0.50*0.55}\n" "KI = {-2500:0.0092, 0:0.0092, -10000:0.0092*0.91}\n\n" "MANEUVERS_FREQUENCY = 1 # seconds\n" "# max distance in mm-s of robot's deviation from planned moving vector\n" "# if dev. is bigger than this - robot will turn to it's planned moving vector\n" "COURSE_SIDE_DEVIATION_MAX = 50 # max allowed robot's deviation from course im mm-s (threshold)\n" "# distance to stop in mm-s between robot and path ending point\n" "# (its a good idea to keep this value greater than allowed course deviation)\n" "COURSE_DESTINATION_DIFF = 3000\n" "COURSE_ADJ_SMC_VAL = 10 # nav wheels turn value when trying to get back to the course (SHOULD BE POSITIVE VALUE!)\n" "WINDOW = float(\"inf\") # anyway, the integral is used for only some hundreds of time\n" "# AB moving vector used as A----A1--B, where A1 is point when robot starts moving to next point.\n" "# this determines A1-B distance\n" "MANEUVER_START_DISTANCE = {False:4000, True:4000} \n" "USE_SPEED_LIMIT = True # when distance to target point is less than specified in the config\n" "DECREASE_SPEED_TRESHOLD = 5000 # millimeters\n" "SUM_ANGLES_HISTORY_MAX = 1000 # max value and min -value of sum(angles_history), should be positive here, in config\n" "# distance between sides of spiral robot movements, expected to be equal to working area width, may be any positive val\n" "SPIRAL_SIDES_INTERVAL = {False:333, True:2000} \n" "FIELD_REDUCE_SIZE = 200 # cut field's each side for this value, mms\n" "PREV_CUR_POINT_MIN_DIST = 100 # pass by cur points dist between them and prev point is lesser than this, mms\n" "FILTER_MAX_DIST = 5000 # maximum allowable distance between consecutive points (in millimeters)\n" "FILTER_MIN_DIST = 600 # minimum allowable distance between consecutive points (in millimeters)\n" "USE_EMERGENCY_FIELD_GENERATION = False # allows to generate field by moving forward for a given duration\n" "EMERGENCY_FIELD_SIZE = 45000 # mms; side of the area that will be created if emergency field creation is enabled\n" "EMERGENCY_MOVING_TIME = 10 # seconds of moving forward for vector getting\n" "CONTINUE_PREVIOUS_PATH = False\n" "PREVIOUS_PATH_POINTS_FILE = \"path_points.dat\"\n" "PREVIOUS_PATH_INDEX_FILE = \"path_index.txt\"\n" "FAR_TARGET_THRESHOLD = {-2500:25000 ,0:25000, -10000:25000} # the output of the KP KI is boost if the target is far than this threshold\n" "FAR_TARGET_GAIN = {-2500:1.15 ,0:1.15, -10000:1.15} # the output of the KP KI is boost by this muliplier if the target is far than the threshold\n" "CLOSE_TARGET_THRESHOLD = {-2500:5000 ,0:5000, -10000:5000} # the output of the KP KI is managed if the target is less than this threshold\n" "SMALL_RAW_ANGLE_SQUARE_THRESHOLD = {-2500:100 ,0:100, -10000:100} # the output of the KP KI is calm by a muliplier if the raw angle is less than the threshold\n" "SMALL_RAW_ANGLE_SQUARE_GAIN = {-2500:0.9 ,0:0.9, -10000:1} # the output of the KP KI is calm by this muliplier if the raw angle is less than the threshold\n" "BIG_RAW_ANGLE_SQUARE_THRESHOLD = {-2500:625 ,0:625, -10000:625} # the output of the KP KI is boost by a muliplier if the raw angle is more than the threshold\n" "BIG_RAW_ANGLE_SQUARE_GAIN = {-2500:1.35 ,0:1.35, -10000:1.35} # the output of the KP KI is boost by this muliplier if the raw angle is more than the threshold\n" "#OPEN_LOOP_TF_AMPLITUDES = [5, 5, 5*12/14, 5*12/17, 5*12/20, 5*12/23] # 2500 Sinus angle range when the servo system is in open loop\n" "OPEN_LOOP_TF_AMPLITUDES = [5*9/9, 5*9/13, 5*9/24, 5*9/28, 5*9/34, 5*9/40] # 10000 Sinus angle range when the servo system is in open loop\n" "OPEN_LOOP_TF_MAX_SAMPLES = [5, 7, 10, 15, 20, 40] #Sinus sampling range when the servo system is in open loop\n" "OPEN_LOOP_TF_FREQUENCIES = [1/5, 1/7, 1/10, 1/15, 1/20, 1/40] # Sinus frequency range when the servo system is in open loop\n" "OPEN_LOOP_FLAT = 9 # waiting time between two stimuli\n" "OPEN_LOOP_TF_MODE = True # mode enable a sinus angle drive on the robot \n" "STRAIGHT_DIRECTION_INTEGRAL_DURATION = 10\n" "ORIGIN_AVERAGE_SAMPLES = 5\n" "GPS_CLOCK_JITTER = 0.050\n" "PURSUIT_LIMIT = 3000 # length given in mm : at -2500rpm the deviation get correct after 3 meter path\n\n" "# ======================================================================================================================\n" "# EXTRACTION SETTINGS\n" "# ======================================================================================================================\n" "EXTRACTION_DEFAULT_METHOD = \"single_center_drop\" # or \"five_drops_near_center\"\n" "ADDITIONAL_EXTRACTIONS_DISTANCE_X = 25 # mm\n" "ADDITIONAL_EXTRACTIONS_DISTANCE_Y = 30 # mm\n" "AVOID_CORK_VIEW_OBSCURING = True # is True: adds offsets to control points to make a plant to be at the top half of the undistorted zone\n" "DISTANCE_FROM_UNDIST_BORDER = 100 # pixels; the corkscrew will move so that the plant is at this distance from the upper border of undistorted zone if AVOID_CORK_VIEW_OBSCURING is True\n" "EXTRACTIONS_FULL_CYCLES = 2 # count of full extraction loops called after periphery NN detection (should be >= 1)\n" "SEEK_DELTA_DISTANCE = 25 # mm; if weed is lost after tuning/getting closer - we do 3 shifts for that value (down, left, right) and trying to find it\n\n\n" "# ======================================================================================================================\n" "# PATHS SETTINGS\n" "# ======================================================================================================================\n" "INPUT_GPS_FIELD_FILE = \"field.txt\"\n" "OUTPUT_GPS_HISTORY_FILE = \"gps_history.txt\"\n" "DARKNET_LIB_DIR_PATH = \"/home/violette/field/darknet/\"\n\n" "# ======================================================================================================================\n" "# VESC SETTINGS\n" "# ======================================================================================================================\n" "VESC_PORT = \"/dev/ttyACM0\"\n" "VESC_BAUDRATE = 115200\n" "VESC_RPM_UI = -11500\n" "VESC_RPM_SLOW = -2500\n" "VESC_RPM_FAST = -10000\n" "VESC_RPM_AUDIT = -10000\n" "VESC_MOVING_TIME = float(\"inf\")\n" "VESC_ALIVE_FREQ = 0.5 # freq of sending \"keep working\" signal to engines when moving\n" "VESC_CHECK_FREQ = 0.001 # freq of checking need to stop\n" "STEP_FORWARD_TIME = 0.8 # step after extraction loops are done\n" "STEP_FORWARD_RPM = 0#-2000 # # step after extraction loops are done #-2500 à remettre\n" "FAST_TO_SLOW_RPM = 2500\n" "FAST_TO_SLOW_TIME = 5\n\n\n" "# ======================================================================================================================\n" "# GPS SETTINGS\n" "# ======================================================================================================================\n" "GPS_PORT = \"/dev/ttyTHS1\"\n" "GPS_BAUDRATE = 19200\n" "GPS_POSITIONS_TO_KEEP = 1000\n" "NO_GPS_TIMEOUT = 10\n" "GPS_CHECK_IN_DEGRADED_MODE = 30 #Check if gps returned every GPS_CHECK_IN_DEGRADED_MODE navigation cycle.\n\n" "# ======================================================================================================================\n" "# SMOOTHIE SETTINGS\n" "# ======================================================================================================================\n" "SMOOTHIE_HOST = \"/dev/ttyACM1\" # smoothie's ip address for telnet or port for usb serial connector\n" "SMOOTHIE_BAUDRATE = 115200\n" "SMOOTHIE_BACKEND = 2 # 1 = telnet, 2 = serial\n\n" "# EXTRACTION\n" "X_MIN = 0\n" "X_MAX = 430\n" "Y_MIN = 0\n" "Y_MAX = 220\n" "Z_MIN = -float(\"inf\")\n" "Z_MAX = 100\n\n" "XY_F_MIN = 1\n" "XY_F_MAX = 8000 \n" "Z_F_MIN = 1\n" "Z_F_MAX = 2000 \n\n" "XY_COEFFICIENT_TO_MM = 1\n" "Z_COEFFICIENT_TO_MM = 1 # not used yet\n\n" "EXTRACTION_Z = 10 #65 # value that passed to smoothie when doing plant extration\n" "Z_F_EXTRACTION_UP = 1550 # 1350\n" "Z_F_EXTRACTION_DOWN = 1900\n" "ALLOW_PRECISE_RESCAN = True \n\n" "# CALIBRATION\n" "USE_X_AXIS_CALIBRATION = True\n" "USE_Y_AXIS_CALIBRATION = True\n" "USE_Z_AXIS_CALIBRATION = True\n" "USE_A_AXIS_CALIBRATION = False\n" "USE_B_AXIS_CALIBRATION = False\n" "USE_C_AXIS_CALIBRATION = False\n\n" "X_AXIS_CALIBRATION_TO_MAX = False\n" "Y_AXIS_CALIBRATION_TO_MAX = False\n" "Z_AXIS_CALIBRATION_TO_MAX = False \n" "A_AXIS_CALIBRATION_TO_MAX = None\n" "B_AXIS_CALIBRATION_TO_MAX = None\n" "C_AXIS_CALIBRATION_TO_MAX = None\n\n" "CALIBRATION_DISTANCE = 1000 # should be always positive, sign will be auto-defined using *_AXIS_CALIBRATION_TO_MAX flag key\n" "AFTER_CALIBRATION_AXIS_OFFSET = 0\n\n" "# NAVIGATION\n" "A_MIN = -9 #-38/6\n" "A_MAX = 9 #38/6\n" "B_MIN = -float(\"inf\")\n" "B_MAX = float(\"inf\")\n" "C_MIN = -float(\"inf\")\n" "C_MAX = float(\"inf\")\n\n" "A_F_MIN = 1\n" "A_F_MAX = 4000\n" "A_F_UI = 1000\n" "B_F_MIN = 1\n" "B_F_MAX = 4000\n" "C_F_MIN = 1\n" "C_F_MAX = 1000\n\n" "A_ONE_DEGREE_IN_SMOOTHIE = 2 # A axis\n" "A_DEGREES_PER_SECOND = 5 # A axis\n" "NAV_TURN_WHEELS_CENTER = 0\n\n\n" "# ======================================================================================================================\n" "# YOLO PERIPHERY NETWORK SETTINGS\n" "# ======================================================================================================================\n" "PERIPHERY_CONFIDENCE_THRESHOLD = 0.1\n" "PERIPHERY_HIER_THRESHOLD = 0.5\n" "PERIPHERY_NMS_THRESHOLD = 0.4\n" "PERIPHERY_INPUT_SIZE = (416, 416)\n" "PERIPHERY_CONFIG_FILE = \"yolo/Y0016_416.cfg\"\n" "PERIPHERY_WEIGHTS_FILE = \"yolo/Y0016.weights\"\n" "PERIPHERY_CLASSES_FILE = \"yolo/Y0016.names\"\n" "PERIPHERY_DNN_BACKEND = 5\n" "PERIPHERY_DNN_TARGET = 6\n" "PERIPHERY_WRAPPER = 1\n" "PERIPHERY_DATA_FILE = \"yolo/Y0014.data\"\n\n" "# ======================================================================================================================\n" "# YOLO PRECISE NETWORK SETTINGS\n" "# ======================================================================================================================\n" "PRECISE_CONFIDENCE_THRESHOLD = 0.1\n" "PRECISE_HIER_THRESHOLD = 0.5\n" "PRECISE_NMS_THRESHOLD = 0.4\n" "PRECISE_INPUT_SIZE = (832, 832)\n" "PRECISE_CONFIG_FILE = \"yolo/Y0016_832.cfg\"\n" "PRECISE_WEIGHTS_FILE = \"yolo/Y0016.weights\"\n" "PRECISE_CLASSES_FILE = \"yolo/Y0016.names\"\n" "PRECISE_DATA_FILE = \"yolo/Y0014.data\"\n" "PRECISE_DNN_BACKEND = 5\n" "PRECISE_DNN_TARGET = 6\n" "PRECISE_WRAPPER = 1\n\n\n" "# ======================================================================================================================\n" "# CAMERA SETTINGS\n" "# ======================================================================================================================\n" "CAMERA_W = 3280\n" "CAMERA_H = 2464\n" "APPLY_IMAGE_CROPPING = True \n" "CROP_W_FROM = 684\n" "CROP_W_TO = 2684\n" "CROP_H_FROM = 368\n" "CROP_H_TO = 1868\n" "CAMERA_FRAMERATE = 6\n" "CAMERA_FLIP_METHOD = 0\n" "SCENE_CENTER_X = 1000 # 1684 for uncropped\n" "SCENE_CENTER_Y = 980 # 1348 for uncropped\n" "ONE_MM_IN_PX = 5.2\n" "ISP_DIGITAL_GAIN_RANGE_FROM = 4\n" "ISP_DIGITAL_GAIN_RANGE_TO = 4\n" "GAIN_RANGE_FROM = 4\n" "GAIN_RANGE_TO = 4\n" "EXPOSURE_TIME_RANGE_FROM = 660000\n" "EXPOSURE_TIME_RANGE_TO = 660000\n" "AE_LOCK = True\n" "CV_APPLY_ROTATION = False\n" "CV_ROTATE_CODE = 2\n" "APPLY_THREAD_BUFF_CLEANING = True\n" "BUFF_CLEANING_DELAY = 0 # seconds of waiting before frame reading; should be positive or zero; set to 0 if thread cleaning is used\n" "VIEW_ZONE_POLY_POINTS = [[387, 618], [439, 510], [556, 433], [670, 375], [808, 319], [982, 285], [1143, 279], [1293, 294], [1501, 339], [1635, 395], [1766, 473], [1816, 550], [1867, 637], [1881, 675], [1919, 795], [1942, 926], [1959, 1066], [1964, 1217], [1957, 1321], [1949, 1393], [1874, 1425], [1802, 1457], [1692, 1498], [1555, 1537], [1410, 1567], [1219, 1589], [1081, 1590], [944, 1590], [804, 1575], [679, 1552], [569, 1525], [423, 1475], [330, 1431], [277, 1399], [273, 1289], [279, 1131], [297, 976], [343, 780]]\n" "WORKING_ZONE_UNCROPPED_POLY_POINTS = [[1684, 1513], [914, 1448], [929, 1123], [1024, 768], [1324, 683], [1684, 638], [2044, 683], [2344, 768], [2439, 1123], [2454, 1448]]\n" "#WORKING_OLD_ZONE_POLY_POINTS = [[232, 1105], [231, 942], [243, 781], [271, 648], [338, 455], [450, 399], [569, 355], [726, 314], [870, 295], [996, 289], [1128, 297], [1251, 316], [1383, 351], [1530, 406], [1621, 444], [1663, 552], [1690, 648], [1713, 762], [1727, 863], [1732, 944], [1731, 1086], [1588, 1104], [1418, 1117], [1230, 1130], [1097, 1133], [683, 1136], [397, 1118], [232, 1104]]\n" "IMAGE_CONTROL_POINTS_MAP = [[981, 995, 0, 0, 1], [876, 996, -20, 0, 2], [778, 998, -40, 0, 3], [686, 998, -60, 0, 4], [601, 1000, -80, 0, 5], [524, 1001, -100, 0, 6], [460, 1002, -120, 0, 7], [400, 1006, -140, 0, 8], [348, 1009, -160, 0, 9], [305, 1007, -180, 0, 10], [270, 1008, -200, 0, 11], [980, 892, 0, 20, 12], [877, 893, -20, 20, 13], [776, 895, -40, 20, 14], [683, 900, -60, 20, 15], [599, 906, -80, 20, 16], [521, 912, -100, 20, 17], [456, 916, -120, 20, 18], [397, 923, -140, 20, 19], [348, 929, -160, 20, 20], [305, 932, -180, 20, 21], [269, 936, -200, 20, 22], [979, 791, 0, 40, 23], [876, 792, -20, 40, 24], [779, 798, -40, 40, 25], [685, 805, -60, 40, 26], [602, 812, -80, 40, 27], [524, 821, -100, 40, 28], [458, 832, -120, 40, 29], [401, 841, -140, 40, 30], [349, 851, -160, 40, 31], [308, 860, -180, 40, 32], [269, 867, -200, 40, 33], [978, 697, 0, 60, 34], [878, 700, -20, 60, 35], [783, 706, -40, 60, 36], [691, 713, -60, 60, 37], [607, 725, -80, 60, 38], [534, 737, -100, 60, 39], [467, 749, -120, 60, 40], [409, 763, -140, 60, 41], [359, 774, -160, 60, 42], [315, 787, -180, 60, 43], [279, 798, -200, 60, 44], [977, 612, 0, 80, 45], [881, 616, -20, 80, 46], [788, 622, -40, 80, 47], [700, 633, -60, 80, 48], [619, 644, -80, 80, 49], [544, 658, -100, 80, 50], [480, 674, -120, 80, 51], [422, 690, -140, 80, 52], [371, 703, -160, 80, 53], [326, 719, -180, 80, 54], [285, 734, -200, 80, 55], [976, 538, 0, 100, 56], [885, 541, -20, 100, 57], [793, 547, -40, 100, 58], [711, 558, -60, 100, 59], [630, 572, -80, 100, 60], [559, 586, -100, 100, 61], [494, 602, -120, 100, 62], [435, 620, -140, 100, 63], [384, 638, -160, 100, 64], [338, 657, -180, 100, 65], [301, 672, -200, 100, 66], [976, 472, 0, 120, 67], [887, 475, -20, 120, 68], [801, 481, -40, 120, 69], [720, 491, -60, 120, 70], [642, 505, -80, 120, 71], [573, 521, -100, 120, 72], [509, 537, -120, 120, 73], [450, 556, -140, 120, 74], [400, 576, -160, 120, 75], [355, 596, -180, 120, 76], [313, 614, -200, 120, 77], [976, 414, 0, 140, 78], [892, 415, -20, 140, 79], [810, 422, -40, 140, 80], [730, 432, -60, 140, 81], [657, 446, -80, 140, 82], [585, 462, -100, 140, 83], [525, 480, -120, 140, 84], [467, 500, -140, 140, 85], [416, 520, -160, 140, 86], [366, 541, -180, 140, 87], [329, 558, -200, 140, 88], [975, 362, 0, 160, 89], [894, 364, -20, 160, 90], [818, 371, -40, 160, 91], [742, 381, -60, 160, 92], [668, 396, -80, 160, 93], [601, 411, -100, 160, 94], [539, 432, -120, 160, 95], [485, 450, -140, 160, 96], [435, 469, -160, 160, 97], [386, 495, -180, 160, 98], [344, 512, -200, 160, 99], [974, 320, 0, 180, 100], [899, 321, -20, 180, 101], [824, 330, -40, 180, 102], [752, 338, -60, 180, 103], [683, 351, -80, 180, 104], [619, 367, -100, 180, 105], [557, 386, -120, 180, 106], [505, 405, -140, 180, 107], [455, 424, -160, 180, 108], [408, 444, -180, 180, 109], [367, 461, -200, 180, 110], [1083, 994, 20, 0, 111], [1180, 992, 40, 0, 112], [1275, 992, 60, 0, 113], [1357, 991, 80, 0, 114], [1434, 990, 100, 0, 115], [1500, 990, 120, 0, 116], [1559, 992, 140, 0, 117], [1609, 994, 160, 0, 118], [1652, 993, 180, 0, 119], [1691, 995, 200, 0, 120], [1082, 891, 20, 20, 121], [1181, 893, 40, 20, 122], [1273, 895, 60, 20, 123], [1358, 898, 80, 20, 124], [1434, 901, 100, 20, 125], [1500, 907, 120, 20, 126], [1559, 912, 140, 20, 127], [1608, 916, 160, 20, 128], [1651, 920, 180, 20, 129], [1691, 923, 200, 20, 130], [1078, 791, 20, 40, 131], [1178, 795, 40, 40, 132], [1268, 800, 60, 40, 133], [1352, 808, 80, 40, 134], [1427, 814, 100, 40, 135], [1495, 823, 120, 40, 136], [1552, 830, 140, 40, 137], [1603, 839, 160, 40, 138], [1646, 846, 180, 40, 139], [1686, 854, 200, 40, 140], [1077, 698, 20, 60, 141], [1173, 702, 40, 60, 142], [1264, 710, 60, 60, 143], [1344, 721, 80, 60, 144], [1419, 731, 100, 60, 145], [1483, 741, 120, 60, 146], [1543, 754, 140, 60, 147], [1593, 766, 160, 60, 148], [1639, 775, 180, 60, 149], [1677, 785, 200, 60, 150], [1072, 612, 20, 80, 151], [1168, 619, 40, 80, 152], [1254, 628, 60, 80, 153], [1335, 639, 80, 80, 154], [1407, 655, 100, 80, 155], [1473, 668, 120, 80, 156], [1530, 681, 140, 80, 157], [1580, 694, 160, 80, 158], [1627, 710, 180, 80, 159], [1666, 723, 200, 80, 160], [1068, 540, 20, 100, 161], [1159, 545, 40, 100, 162], [1244, 552, 60, 100, 163], [1322, 566, 80, 100, 164], [1393, 580, 100, 100, 165], [1457, 597, 120, 100, 166], [1516, 612, 140, 100, 167], [1568, 628, 160, 100, 168], [1612, 644, 180, 100, 169], [1652, 661, 200, 100, 170], [1064, 474, 20, 120, 171], [1149, 479, 40, 120, 172], [1231, 487, 60, 120, 173], [1308, 500, 80, 120, 174], [1380, 515, 100, 120, 175], [1444, 533, 120, 120, 176], [1502, 549, 140, 120, 177], [1552, 567, 160, 120, 178], [1597, 586, 180, 120, 179], [1634, 600, 200, 120, 180], [1059, 413, 20, 140, 181], [1141, 420, 40, 140, 182], [1220, 429, 60, 140, 183], [1295, 442, 80, 140, 184], [1364, 458, 100, 140, 185], [1426, 474, 120, 140, 186], [1482, 491, 140, 140, 187], [1533, 509, 160, 140, 188], [1579, 531, 180, 140, 189], [1617, 544, 200, 140, 190], [1055, 364, 20, 160, 191], [1133, 369, 40, 160, 192], [1208, 380, 60, 160, 193], [1280, 393, 80, 160, 194], [1346, 409, 100, 160, 195], [1407, 424, 120, 160, 196], [1466, 443, 140, 160, 197], [1522, 462, 160, 160, 198], [1563, 479, 180, 160, 199], [1603, 496, 200, 160, 200], [1050, 319, 20, 180, 201], [1126, 328, 40, 180, 202], [1199, 340, 60, 180, 203], [1266, 348, 80, 180, 204], [1329, 363, 100, 180, 205], [1393, 379, 120, 180, 206], [1448, 397, 140, 180, 207], [1507, 416, 160, 180, 208], [1548, 430, 180, 180, 209], [1584, 446, 200, 180, 210]]\n" "UNDISTORTED_ZONE_RADIUS = 240\n" "WORKING_ZONE_POLY_POINTS = [[1000, 1145], [230, 1080], [245, 755], [340, 400], [640, 315], [1000, 270], [1360, 315], [1660, 400], [1755, 755], [1770, 1080]]\n\n" "# ======================================================================================================================\n" "# APP SETTINGS\n" "# ======================================================================================================================\n" "SAVE_DEBUG_IMAGES = True\n" "DEBUG_IMAGES_PATH = \"debug_images/\"\n" "ALLOW_GATHERING = False\n" "FILES_TO_KEEP_COUNT = 600\n" "RECEIVE_FIELD_FROM_RTK = False\n" "EXTRACTION_TUNING_MAX_COUNT = 3\n" "DELAY_BEFORE_2ND_SCAN = 0.3 # delay in seconds after robot stop and before second scan (M=1)\n" "DB_NAME = \"dbname\"\n" "DB_USER = \"username\"\n" "DB_HOST = \"x.x.x.x\"\n" "DB_PWD = \"password\"\n" "ROBOT_SN = \"SN007\"\n" "UI_LANGUAGE = \"fr\"\n" "AUDIT_MODE = False\n" "AUDIT_DIVIDER = 6\n" "SLOW_FAST_MODE = False\n" "SLOW_MODE_MIN_TIME = 3 # seconds\n" "AUDIT_OUTPUT_FILE = \"audit.txt\"\n" "LOG_ROOT_DIR = \"logs/\"\n" "STATISTICS_OUTPUT_FILE = \"statistics.txt\"\n" "DATA_GATHERING_DIR = \"gathered_data/\"\n" "CORK_CALIBRATION_MIN_TIME = 360000\n" "QUEUE_NAME_UI_MAIN = \"/queue_ui_main\"\n" "QUEUE_NAME_UI_NOTIFICATION = \"/queue_ui_notification\"\n" "ALLOW_DETECT_AND_EXTRACT_GROUP = False\n" "VERBOSE = True\n" "MYOPIA_PATCH = True\n" "CONTINUOUS_INFORMATION_SENDING = True\n" "ALIVE_SENDING_TIMEOUT = 1\n" "LAST_ANGLE_WHEELS_FILE = \"last_angle_wheels.txt\"\n" "FRAME_SHOW = True\n" "SHARED_MEMORY_NAME_DETECTED_FRAME = \"/detected_frame\"\n" "TWO_POINTS_FOR_CREATE_FIELD = False\n\n" "# ======================================================================================================================\n" "# MATRIX SETTINGS\n" "# ======================================================================================================================\n" "#DETECTION\n" "MATRIX_PLANT_ROOT = 1\n" "MATRIX_PLANT_LEAF = 2 # All leaft will be number greater than this parameter (2 = one leaft, 3 = two leaft, ...)\n" "GROUP_THRESHOLD = 3\n" "#EXTRACTION\n" "MATRIX_EXTRACTION = 1\n" "MATRIX_EXTRACTION_PATTERN = 2 # All different pattern will be number greater than this parameter (2 = pattern one in ExtractionMethods, 3 = pattern two in ExtractionMethods, ...)\n" "#ALL\n" "MATRIX_ONE_MATRICE_CELL_IN_MM = 10\n" "OFFSET_FOR_MATRIX_BORDER_IN_CELL = 5\n" "OFFSET_FOR_MATRIX_PATTERN_IN_MM = 10 # 20 for corkscrew\n" "DEBUG_MATRIX_FILE = False\n" "ALLOW_DETECT_AND_EXTRACT_GROUP = False\n\n" "# ======================================================================================================================\n" "# OLD PATHS\n" "# ======================================================================================================================\n" "QUERY_IMAGE_PATH = \"input\\\\prise8.jpg\"\n" "OUTPUT_IMAGE_DIR = \"output\\\\\"\n" "OUTPUT_IMAGE_NAME = \"prise2 - AOI\"\n" "OUTPUT_IMAGE_EXTENSION = \".jpg\"\n\n" "# ======================================================================================================================\n" "# NTRIP CLIENT SETTINGS\n" "# ======================================================================================================================\n" "NTRIP = False \n" "NTRIP_RESTART_TIMEOUT = 60\n" "NTRIP_USER = \"centipede\"\n" "NTRIP_PASSWORD = \"centipede\"\n" "NTRIP_CASTER = \"caster.centipede.fr\"\n" "NTRIP_PORT = 2101\n" "NTRIP_MOUNTPOINT = \"LIENSS\"\n\n" "NTRIP_OUTPUT_PORT = \"/dev/ttyACM1\"\n" "NTRIP_OUTPUT_BAUDRATE = 38400\n\n" "# ======================================================================================================================\n" "# PREDICTION SETTINGS\n" "# ======================================================================================================================\n" "ZONE_THRESHOLD_DEGREE = {436:5,697:7,796:17,849:15,953:6}\n") subst = "\\1 = \"new_var\" \\3" # You can manually specify the number of replacements by changing the 4th argument result = re.sub(regex, subst, test_str, 0, re.MULTILINE) if result: print (result) # 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