re.sub () дает Nameerror, когда нет совпадений - PullRequest
1 голос
/ 26 февраля 2020

Итак, я пытаюсь найти и заменить строки текста из CSV-файла и продолжаю получать ошибки, если re.sub () не может найти совпадений.

Скажите, если текст в строке

text = "a00123 一二三四五"

И мои коды

import re
html = "www.abcdefg.com/"
text = "a00123 一二三四五"
namelist_raw = re.sub(r'([a-z])00(\d{3})',r'\1-\2',text)
p = re.findall(r'\w',namelist_raw)
if p:
  q = re.findall(r'([a-z]-\d{3})',namelist_raw)
  for namelist in q:
    print(namelist)
else:
  namelist = "failed"

link = html + namelist
print(link)

, поэтому для этого я должен получить результат

www.abcdefg.com/a-123

так что это не проблема. но если текст будет примерно таким,

text = "asdfdsdfd123 一二三四五"

Я получу Nameerror, сказав, что имя 'namelist' не определено. Почему это так? Я подумал, что если заявление if else, которое я уже написал, если что-нибудь еще, список имен «провалился»

мой код

1 Ответ

1 голос
/ 26 февраля 2020

Ваш p = re.findall(r'\w',namelist_raw) извлекает каждое слово char из строки, а позже вы извлекаете значения из строки только при наличии совпадений. Вам не нужна эта проверка.

Далее, namelist заполняется, только если есть совпадение для [a-z]-\d{3}, но если совпадения нет, вы не заполняете его. Вы также должны учитывать этот сценарий.

Использование

import re
html = "www.abcdefg.com/"
text = "a00123 一二三四五"
p = re.findall(r'([a-z])00(\d{3})', text)  # Extract a list of tuples
namelist = []                              # Init the list
for letter, number in p:                  
  namelist.append(f"{letter}-{number}")    # Populate namelist with formatted tuple values

if len(namelist):                          # If there was a match
  namelist = "/".join(namelist)            # Create a string by joining namelist items with /
else:
  namelist = "failed"                      # Else, assign failed to the namelist

link = html + namelist
print(link)

См. Python demo .

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