How can regex find the middle three letters of a 5char-word? | Sololearn: Learn to code for FREE!

+9

# How can regex find the middle three letters of a 5char-word?

Example findall(regex,"12345")=234 General case: find string w.o first and last.

5/2/2020 7:17:59 PM

Oma Falk

+9

Oma Falk Based on the question: "How can regex find the middle 3 letters of a 5 char-word?" I'm assuming the word can include any non-whitespace alphanumeric character like this one: "12345" The regexes in this thread would work with this example. However, many may also incorrectly work for the following invalid values: " 234 " " 2345" "1234 " "1 3 5" "123 5" The same regexes may not properly extract "234" from 5 char values with leading and/or trailing whitespaces like the following: " 12345" "12345 " " 12345 " I believe the proper regex to cover all positive and negative test cases would be: re.search(r'(?<!\S)\S(\S{3})\S(?!\S)', s) - The \S matches on non whitespace characters. - (?<!\S) is a negative look behind. - (?!\S) is a negative look ahead. To match on all but the first and last characters, replace (\S{3}) with (\S+) The code below runs tests on the RegEx patterns posted in this thread for review with mine posted last: https://code.sololearn.com/cnnrMYDDmP2x/ I hope this helps.

+7

import re print(re.findall(r".(.{3}).", "12345")) print(re.findall(r".(.{3}).", "hello")) print(re.findall(r".(.{3}).", "12AA5")) same "pattern" used for all three.

+6

Oma Falk If you know the length of the string why not just use a slice? π³

+5

reg = re.compile(r'^(\d|\w)(\d{3}|\w{3})(\d|\w)\$') mo = reg.search('12345') print(mo.group(2)) It works for letters or numbers. Not both

+5

Slick got it! https://code.sololearn.com/czuv7g9yUI1A/?ref=app

+4

Code Crasher want to learn regex. It is very mighty. After 3 hours I could find a regex for a String if it is a tictactoe winner. Hope to become a bit quicker.

+4

Ahhh groups...good.

+4

Oma Falk https://automatetheboringstuff.com/2e/chapter7/ πππ

+4

Code Crasher Yes...wehre elseππ

+3

reg = r"\B.+\B" "The \B metacharacter is used to find a match, but where it is NOT at the beginning/end of a word." w3Schools.com

+3

Regex is such a lovely topic. You could use a lookaround pattern (lookbehind and lookahead), like: import re m=re.match(r"(?<=.).{3}(?=.)", your_5_chr_str).group() (since + and other special characters are greedy, you don't have to specify {3} though.) You could also capture it in a group: m=re.match(r".(.+).",your_5_chr_str).group(1)

+2

This is what helped me get to grips with regular expression after the tutorial in Sololearn:- https://www.w3schools.com/python/python_regex.asp

+2

David Carroll yeeeees got it for 90%

+1

Code Crasher brilliant

+1

Folks... I need a regex for my feed post with state machine.