Python | Extract Numbers in Brackets in String
Last Updated :
09 Apr, 2023
Sometimes, while working with Python strings, we can have a problem in which we have to perform the task of extracting numbers in strings that are enclosed in brackets. Let’s discuss the certain ways in which this task can be performed.
Method 1: Using regex The way to solve this task is to construct a regex string that can return all the numbers in a string that has brackets around them.
Python3
import re
test_str = "gfg is [1] [4] all geeks"
print ( "The original string is : " + test_str)
res = re.findall(r "\[\s*\+?(-?\d+)\s*\]" , test_str)
print ( "Extracted number list : " + str (res))
|
Output :
The original string is : gfg is [1] [4] all geeks
Extracted number list : ['1', '4']
Time Complexity: O(N), where N is the length of the given string.
Space Complexity: O(N)
Method 2 : Using startswith(), endswith() and replace() methods
Initially split the string. Iterate over the list after splitting, check for strings in the list that start with “[” and end with”]”.If found remove those square braces and check whether the string after removing braces is numeric or not.
Python3
test_str = "gfg is [1] [4] all geeks"
print ( "The original string is : " + test_str)
x = test_str.split()
res = []
for i in x:
if i.startswith( '[' ) and i.endswith( ']' ) :
a = i.replace( '[' ,'')
a = a.replace( ']' ,'')
if a.isdigit():
res.append(a)
print ( "Extracted number list : " + str (res))
|
Output
The original string is : gfg is [1] [4] all geeks
Extracted number list : ['1', '4']
Time Complexity: O(N), where N is the length of the given string.
Space Complexity: O(N)
Method 3 : Using find() and replace() methods
Python3
test_str = "gfg is [1] [4] all geeks"
print ( "The original string is : " + test_str)
x = test_str.split()
res = []
for i in x:
if i.find( '[' ) = = 0 and i.find( ']' ) = = len (i) - 1 :
a = i.replace( '[' ,'')
a = a.replace( ']' ,'')
if a.isdigit():
res.append(a)
print ( "Extracted number list : " + str (res))
|
Output
The original string is : gfg is [1] [4] all geeks
Extracted number list : ['1', '4']
Time Complexity: O(N), where N is the length of the given string.
Auxiliary Space: O(N)
Method 4: Using split() and isdigit() methods
Step-by-step approach:
- Initialize a list variable to store the extracted numbers.
- Split the string using the “[” and “]” characters as delimiters. This will create a list of substrings.
- Loop through the substrings and check if each substring contains a number using the isdigit() method.
- If a substring contains a number, append it to the list variable.
- Print the list of extracted numbers.
Below is the implementation of the above approach:
Python3
test_str = "gfg is [1] [4] all geeks"
print ( "The original string is : " + test_str)
num_list = []
for substring in test_str.split( "[" ):
if "]" in substring:
num = substring.split( "]" )[ 0 ]
if num.isdigit():
num_list.append( int (num))
print ( "Extracted number list : " + str (num_list))
|
Output
The original string is : gfg is [1] [4] all geeks
Extracted number list : [1, 4]
Time complexity: O(n), where n is the length of the input string. This is because we need to loop through each character in the string once.
Auxiliary space: O(m), where m is the number of numbers in brackets in the input string. This is because we need to store each extracted number in a list.
Method 6: Using a loop and string manipulation
Step-by-step approach:
- Initialize two variables, start and end, to track the indices of the brackets enclosing the number.
- Loop through each character of the string.
- If a bracket is encountered, check whether it is an opening or closing bracket.
- If it is an opening bracket, set the start index to the current index.
- If it is a closing bracket, set the end index to the current index and extract the substring between the start and end indices.
- Check whether the extracted substring contains only digits.
- If it does, append the substring to the list of extracted numbers.
- Return the list of extracted numbers.
Below is the implementation of the above approach:
Python3
test_str = "gfg is [1] [4] all geeks"
print ( "The original string is : " + test_str)
res = []
start = - 1
end = - 1
for i in range ( len (test_str)):
if test_str[i] = = "[" :
start = i
elif test_str[i] = = "]" :
end = i
num_str = test_str[start + 1 :end]
if num_str.isdigit():
res.append(num_str)
print ( "Extracted number list : " + str (res))
|
Output
The original string is : gfg is [1] [4] all geeks
Extracted number list : ['1', '4']
Time complexity: O(n)
Auxiliary space: O(1)
Method 6: Using list comprehension and isdigit() method
- Split the string on spaces to get a list of words.
- Use list comprehension to iterate through the list of words and extract the numbers that are enclosed in square brackets using the isdigit() method.
- Return the list of extracted numbers.
Python3
test_str = "gfg is [1] [4] all geeks"
print ( "The original string is : " + test_str)
res = [ int (word.strip( "[]" )) for word in test_str.split() if word.startswith( "[" ) and word.endswith( "]" ) and word.strip( "[]" ).isdigit()]
print ( "Extracted number list : " + str (res))
|
Output
The original string is : gfg is [1] [4] all geeks
Extracted number list : [1, 4]
Time complexity: O(n), where n is the length of the string.
Auxiliary space: O(n), where n is the length of the string.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...