Removing any single letter on a string in python

18,730

Solution 1

>>> ' '.join( [w for w in input.split() if len(w)>1] )
'23rwqw 34qf34 343fsdfd'

Solution 2

import re
text = "z 23rwqw a 34qf34 h 343fsdfd"
print re.sub(r'(?:^| )\w(?:$| )', ' ', text).strip()

or

tmp = re.sub(r'\b\w\b', ' ', input)
print re.sub(r'\s{2,}', ' ', tmp).strip()

Solution 3

I hope there's a neater regex way than this, but:

>>> import re
>>> text = 'z 23rwqw a 34qf34 h 343fsdfd'

>>> re.sub('(\\b[A-Za-z] \\b|\\b [A-Za-z]\\b)', '', text)
'23rwqw 34qf34 343fsdfd'

It's a word boundary, a single letter, a space, and a word boundary. It's doubled up so it can match a single character at the start or end of the string z_ and _z leaving no space, and a character in the middle _z_ leaving one space.

Solution 4

I had a similar issue and came up with the following regex solution:

import re
pattern = r"((?<=^)|(?<= )).((?=$)|(?= ))"
text = "z 23rwqw a 34qf34 h 343fsdfd"
print(re.sub("\s+", " ", re.sub(pattern, '', text).strip()))
#23rwqw 34qf34 343fsdfd

Explanation

  • (?<=^) and (?<= ) are look-behinds for start of string and space, respectively. Match either of these conditions using | (or).
  • . matches any single character
  • ((?=$)|(?= )) is similar to the first bullet point, except it's a look-ahead for either the end of the string or a space.

Finally call re.sub("\s+", " ", my_string) to condense multiple spaces with a single space.

Share:
18,730
KubiK888
Author by

KubiK888

Updated on June 05, 2022

Comments

  • KubiK888
    KubiK888 almost 2 years

    I would like to remove any single letter from a string in python.

    For example:

    input: 'z 23rwqw a 34qf34 h 343fsdfd'
    output: '23rwqw 34qf34 343fsdfd'
    

    Been trying to figure out for a while with regex without success. I know how to cut things from certain char/symbol in two pieces, but not what I am trying to do.

    I have been tinkering with

    re.sub(r'^[^ ]*', '', text)
    
  • Simas Joneliunas
    Simas Joneliunas about 4 years
    Regex is a tough nut to crack for many beginner developers. It would be great if you could explain on how exactly your regex string actually works so that the OP and other developers could learn from you