Поиск в файле с помощью RegEx, чтобы найти идентификатор и его номер с Python - PullRequest
1 голос
/ 01 октября 2019

Я довольно новичок в RegEx, и я полностью сбит с толку этим моментом, поэтому любая помощь будет принята с благодарностью. Извините, если этот вопрос уже есть, не смог его найти. Все это происходит в Python

Я пытаюсь выполнить поиск внутри текстового файла, который имеет такой текст, как:

www.google.com, something, something : something, [{'id': 481, 'name': 'name it needs to match'}]

="1000" t5:someplace="7713" t5:somethingelse="10" t5:someotherthing="10"

он имеет несколько очень длинных строк (по сути, это журнал).

Что мне нужно сделать, это найти слово «id» с его номером по «имени», которое оно имеет внутрискобки и сохраняют только номер (или все это, не имеет значения), чтобы я мог вернуть его в программу (я пытаюсь создать что-то, что уже существует через API, и я хочу использовать Id существующего элемента для использованияпозже)

Я почти уверен, что смогу выполнить нарезку после того, как отфильтровал ID с его номером, но я изо всех сил пытаюсь написать RegEx, который может найти "Id" и его номер по NAME.

У кого-нибудь есть понимание? любой совет, не говоря уже о куске кода, будет огромной помощью. Я согласен, что вполне возможно, что есть гораздо более простое решение, которого я не вижу, и я буду благодарен, если кто-нибудь скажет мне указанное решение, я здесь, чтобы узнать как можно больше:)

PS: позицияПеременная «name» почти всегда одинакова или, по крайней мере, очень близка к ней, есть ли способ использовать RegEx, чтобы сказать «найти» и затем нарезать все вокруг «имени» примерно на 15-20 символов? Тогда я могу отфильтровать номер только потому, что буду знать, что он там есть.

Ответы [ 2 ]

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

Итак, в конце концов я нашел ответ, но не используя RegEx.

эта проблема возникла, когда я выполнял обработку ошибок в скрипте и загружал данные через API.

Что мне было нужно - я создавал что-то с «именем» или «описанием» (только одно изкаждый, никогда не оба), и поскольку он уже был в API, мне было отказано, поэтому в этом случае я хотел, чтобы он попал в обработку ошибок, в которой перечислялись бы все элементы API, относящиеся к нему, и находилось «имя» или «описание». который я хотел создать в первую очередь, получить его ID и использовать его на других этапах, для которых необходимо использовать ID для своих собственных созданий.

Я просто избегал использования RegEx, получая ответ от API в json ипоиск через цикл с. Я предполагаю, что это не очень эффективно, но оно делает свою работу.

* args является заполнителем для «name» или «description», и поскольку он возвращается как кортеж из одного элемента, я просто разбиваю его на части и использую для поиска по ответу в формате json

Довольно странной проблемой была проблема с KeyError (поскольку я получал либо «имя», либо «описание»), мне было трудно его правильно определить, поэтому я решил использовать метод try, кроме метода для передачи KeyErrors и продолжения работы, пока не обнаружил ошибку. Мне нужно и передать его идентификатор.

def errorHandling(url, accessToken, args):
if args is ():
    return
lookingForThis = str(args[0])
error = ("Creation of " + lookingForThis + " at " + url + "failed. It is probably because it already exists"
                                                          ", anyhow, if it does, we found its ID and used that")
# print(error)
with open("whathaveIdone.txt", "a+") as json_file:
    json_file.write("{0}\n".format(error))
response = requests.request("GET", url, headers=getHeadersWithAuthorization(accessToken), verify=False)
jsonData = json.loads(response.content)
objectID = 0
while objectID == 0:
    for p in jsonData:
        try:
            # print(p)
            if lookingForThis == p["description"]:
                objectID = p["id"]
        except KeyError:
            # print("cant find description match of " + lookingForThis + " in " + str(p))
            pass
        try:
            if lookingForThis == p["name"]:
                objectID = p["id"]
        except KeyError:
            # print("cant find name match of " + lookingForThis + " in " + str(p))
            pass
print("We managed to find and use " + lookingForThis + " at " + url + " with ID: " + str(objectID))
with open("whathaveIdone.txt", "a+") as log:
    log.write("{0} {1} {2}\n".format(url, lookingForThis, str(objectID)))
return objectID
0 голосов
/ 01 октября 2019

Попробуйте

'id': (\d+),.*?'name': '([^']*)'

Таким образом, вы получите идентификатор в группе захвата 1 и имя в группе захвата 2.

...