Split a string with unknown number of spaces as separator in Python

I need a function similar to str.split(' ') but there might be more than one space, and different number of them between the meaningful characters. Something like this:

s = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15        '
ss = s.magic_split()
print(ss)  # ['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

Can I somehow use regular expressions to catch those spaces in between?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

If you don’t pass any arguments to str.split(), it will treat runs of whitespace as a single separator:

>>> ' 1234    Q-24 2010-11-29         563   abc  a6G47er15'.split()
['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

Method 2

s = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15        '
ss = s.split()
print(ss)  # ['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

Method 3

If you have single spaces amid your data (like an address in one field), here’s a solution for when the delimiter has two or more spaces:

with open("textfile.txt") as f:
    content = f.readlines()

    for line in content:
        # Get all variable-length spaces down to two. Then use two spaces as the delimiter.
        while line.replace("   ", "  ") != line:
            line = line.replace("   ", "  ")

        # The strip is optional here.
        data = line.strip().split("  ")
        print(data)

Method 4

We can also use regex’s split method here too.

import re

sample = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15        '

word_list = re.split("s+", sample.strip())

print(word_list) #['1234', 'Q-24', '2010-11-29', '563', 'abc', 'a6G47er15']

I hope this might help someone

Method 5

To split lines by multiple spaces while keeping single spaces in strings:

with open("textfile.txt") as f:
    for line in f:
        line = [i.strip() for i in line.split('  ') if i]
        print(line)

Method 6

There are many solutions to this question.

1.) Using split() is the simplest method

s = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15              '
s = s.split()
print(s)


Output >> ['1234','Q-24','2010-11-29','563','abc','a6G47er15']

2.) There is another way to solve this using findall() method, you need to “import re” in the starting of your python file.

import re
def MagicString(str):
    return re.findall(r'S+', str)
s = ' 1234    Q-24 2010-11-29         563   abc  a6G47er15'
s = MagicString(s)
print(s)
print(MagicString('    he  ll   o'))


Output >> ['1234','Q-24','2010-11-29','563','abc','a6G47er15']
Output >> ['he','ll','o']

3.) If you want to remove any leading (spaces at the beginning) and trailing (spaces at the end) alone use strip().

s = '   hello          '
output = s.strip()
print(output)


Output >> hello


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x