Cleanest way to obtain the numeric prefix of a string
Cleanest way to obtain the numeric prefix of a string
What is the cleanest way to obtain the numeric prefix of a string in Python?
By "clean" I mean simple, short, readable. I couldn't care less about performance, and I suppose that it is hardly measurable in Python anyway.
For example:
Given the string '123abc456def', what is the cleanest way to obtain the string '123'?
The code below obtains '123456':
input = '123abc456def' output = ''.join(c for c in input if c in '0123456789') So I am basically looking for some way to replace the if with a while.
Answer by zondo for Cleanest way to obtain the numeric prefix of a string
Here is my way:
output = input[:next((i for i,v in enumerate(input) if not v.isdigit()),None)] Answer by Kasramvd for Cleanest way to obtain the numeric prefix of a string
You can use itertools.takewhile which will iterate over your string (the iterable argument) until it encounters the first item which returns False (by passing to predictor function):
>>> from itertools import takewhile >>> input = '123abc456def' >>> ''.join(takewhile(str.isdigit, input)) '123' Answer by MSeifert for Cleanest way to obtain the numeric prefix of a string
One way, but not very efficient since it works through the whole string without break would be:
input_string = '123abc456def' [input_string[:c] for c in range(len(input_string)) if input_string[:c].isdigit()][-1] This appends each substring with increasing size if it is a digit and then appends it. So the last element is the one you look for. Because it is the longest startstring that is still a digit.
Answer by Tal Avissar for Cleanest way to obtain the numeric prefix of a string
This is the simplest way to extract a list of numbers from a string:
>>> import re >>> input = '123abc456def' >>> re.findall('\d+', s) ['123','456'] If you need a list of int's then you might use the following code:
>>> map(int, re.findall('\d+', input )) [123,456] And now you can access the first element [0] from the above list
Answer by Mr. E for Cleanest way to obtain the numeric prefix of a string
You could use regex
import re initialNumber = re.match(r'(?P\d+)', yourInput).group('number') Answer by demented hedgehog for Cleanest way to obtain the numeric prefix of a string
input[:len(input) - len(input.lstrip("0123456789"))] Answer by demented hedgehog for Cleanest way to obtain the numeric prefix of a string
Simpler version (leaving the other answer as there's some interesting debate about which approach is better)
input[:-len(input.lstrip("0123456789"))] Answer by Marius Gedminas for Cleanest way to obtain the numeric prefix of a string
Another regexp version strips away everything starting with the first non-digit:
import re output = re.sub('\D.*', '', input) Answer by Xiflado for Cleanest way to obtain the numeric prefix of a string
input = '123abc456def' output = re.findall(r'^\d+', input) Will return ['123'] too.
Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72
0 comments:
Post a Comment