Home > Net >  Finding substrings enclosed within first brackets
Finding substrings enclosed within first brackets

Time:09-30

I have a string which is as following:

" I wanted my friends (he), (she), (they) around"

I want to get a list which will have ["he", "she", "they"].

Following is my code:

copy = " (he), (she), (they)"
x = re.findall(r'^{.}$', copy)

but this gives me an empty list as output.

I also tried the following:

import re

copy = '{he},{she}, {they}'
x = re.findall(r'\{([^]]*)\}', copy)
print(x)

But in this case, the output is:

['he},{she}, {they']

CodePudding user response:

You could use \((\w )\) (any succession of word characters surrounded by parentheses):

import re
re.findall('\((\w )\)', your_string)

input: your_string = " I wanted my friends (he), (she), (they) around"

output: ['he', 'she', 'they']

CodePudding user response:

Firstly you have round bracket ( ) in your example not curly bracket { } secondly ^ denotes start of line or string (depending on mode) whilst your bracketed expressions are inside, thirdly $ denotes end of line or string (depending on mode) whilst your bracketed expressions are inside. You should do

import re
text =  " I wanted my friends (he), (she), (they) around"
print(re.findall(r'\((. ?)\)',text))

output

['he', 'she', 'they']

Note that I used so-called raw-string to avoid need of excessive escaping (see re module docs for further discussion) and need to use \( and \) to denote literal ( and literal ) as otherwise ( and ) denote group, which is also used in above pattern. . ? means match non-greedily one or more of any characters, ? is important to avoid single match he), (she), (they.

CodePudding user response:

Try this: try it online

>>> copy = " I wanted my friends (he), (she), (they) around"
>>> re.findall(r'\((.*?)\)', copy)
['he', 'she', 'they']
  • Related