Как я могу заменить число в строке другим числом? - PullRequest
2 голосов
/ 21 октября 2019

Я пытаюсь заменить число в строке другим числом. Например, у меня есть строка «APU12_24F», и я хочу добавить 7 ко второму номеру, чтобы сделать его «APU12_31F».

Сейчас я просто могу найти номер, который меня интересует,используя string.split.

Я не могу понять, как редактировать новые строки, которые это создает.

def main():
    f=open("edita15888_debug.txt", "r")
    fl = f.readlines()
    for x in fl:
    if ("APU12" in x):
        list_string=split_string(x)
        print(list_string);
    return      

def split_string_APU12(string):
    # Split the string based on APU12_ 
    list_string = string.split("APU12_") 
    return list_string 

main()

Вывод для этого имеет смысл, так как я получу что-то вроде ['', 24F \п]. Мне просто нужно изменить значение 24 на 31, а затем вернуть его в исходную строку.

Не стесняйтесь, дайте мне знать, если есть лучший подход к этому. Я очень плохо знаком с Python, и все, что я могу найти в Интернете с помощью доступных функций поиска / замены, похоже, не делает то, что мне нужно. Спасибо!

Ответы [ 4 ]

4 голосов
/ 21 октября 2019

Предполагая, что шаблон _ + multiple digits, вы можете заменить его на регулярное выражение

import re

re.sub(r"_(\d+)", lambda r: '_'+str(int(r.group(1)) + 7),'APU12_24F')
0 голосов
/ 22 октября 2019

Я предположил, что вам нужно добавить семь к числу, которое идет после подчеркивания. Надеюсь, эта функция будет полезна

import re

def add_seven_to_number_after_underscore_in_a_string(aString):
    regex = re.compile(r'_(\d+)')
    match = regex.search(aString)
    return regex.sub('_' + str(int(match.group(1)) + 7), aString)
0 голосов
/ 21 октября 2019

Я предполагаю, что ваши строки будут иметь формат

APU12 _ ## ... F

(где ### ... означает переменнуючисло цифр, и F может быть любая буква, но только одна). Если это так, вы можете сделать что-то вроде этого:

# Notice the use of context managers
# I would recommend learning about this for working with files
with open('edita15888_debug.txt', 'r') as f:
    fl = f.readlines()

new_strings = []
for line in fl:
    beg, end = line.split('_')

    # This splits the end part into number + character
    number, char = int(end[:-1]), end[-1]

    # Here goes your operation on the number
    number += your_quantity   # This may be your +7, for example

    # Now joining back everything together
    new_strings.append(beg + '_' + str(number) + char)

И это даст вам тот же список строк, но с цифрами перед последней буквой, измененной, как вам нужно.

Я надеюсьэто тебе поможет!

0 голосов
/ 21 октября 2019

Это не обобщенно, потому что я не уверен, как выглядят остальные данные, но, возможно, что-то вроде этого должно работать:

def main():
    f=open("edita15888_debug.txt", "r")
    fl = f.readlines()
    for x in fl:
        if ("APU12" in x):
            list_string=split_string_APU12(x)
            list_string = int(list_string[1].split('F')[0]) + 7
            list_string = "APU12_" + str(list_string) 
            print(list_string)
    return      

def split_string_APU12(string):
    # Split the string based on APU12_ 
    list_string = string.split("APU12_") 
    return list_string 

main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...