我正在处理一组字符串,例如:
abc12b34aa
abc333333b
abd400s
wfd90a34aa
我想从中得到的是:
12b34
333333
400
90a34
我想获取前3位数字,这在熊猫Python中很容易做到
df.suffix = df.name.str.slice(0, 3)
我不确定如何才能达到上述目标。逻辑是从头开始消除所有内容,直到获得第一个数字为止。
答案 0 :(得分:1)
尝试这个!
def get_substr(string):
for i in range(len(string)):
if string[i].isdigit():
break
for j in range(len(string)-1, 0, -1):
if string[j].isdigit():
break
return string[i:j]
df.name.apply(get_substr)
答案 1 :(得分:1)
您可以使用正则表达式:
import re
input = ['abc12b34aa', 'abc333333b', 'abd400s', 'wfd90a34aa']
for item in input:
m = re.search(r'^\D*(.*?)\D*$', item) # \D is any non-digit
if m:
result = m.group(1)
print(result)
输出:
# 12b34
# 333333
# 400
# 90a34
答案 2 :(得分:1)
您可以将字符列表传递到字符串的strip
方法中,它将从字符串的任一端删除那些字符。因此,由于您要删除任一端的所有字符,直到获得一个数字。您可以告诉Strip从字符串中删除所有开头和结尾的小写字母。
您可以在此处找到str.strip()的文档
import string
my_strings = """abc12b34aa
abc333333b
abd400s
wfd90a34aa"""
for line in my_strings.splitlines():
print(line.strip(string.ascii_lowercase))
输出
12b34
333333
400
90a34
答案 3 :(得分:1)
您有一组带有数字的字符串。从本质上讲,您希望删除字符串中第一个和最后一个出现之间的所有项目。
获取与数字对应的索引列表非常简单:
x = "ajhdfg23,3bn,asd98af"
indices = [index for index, item for enumerate(x) if item.isdigit()]
if len(indices) < 1: return x // if you cant find a match, just return the base string.
low_value = indices[0]
max_value = indices[-1]+1
return x[low_value:max_value]
我写这篇文章是为了简洁明了,以便您能理解,但您应该能够使其更紧凑:
x = "ajhdfg23,3bn,asd98af"
indices = [index for index, item for enumerate(x) if item.isdigit()]
return x if len(indices) == 0 else x[indices[0]:indices[-1]+1]