根据特定条件切片字符串

时间:2019-08-13 18:17:34

标签: python

我正在处理一组字符串,例如:

abc12b34aa
abc333333b
abd400s
wfd90a34aa

我想从中得到的是:

12b34
333333
400
90a34

我想获取前3位数字,这在熊猫Python中很容易做到 df.suffix = df.name.str.slice(0, 3)

我不确定如何才能达到上述目标。逻辑是从头开始消除所有内容,直到获得第一个数字为止。

4 个答案:

答案 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]